テキスト内の1つのスペースをgrepする方法は?
cat a.txt| grep " "
または
cat a.txt| grep "\s "
コメント
回答
必要に応じて質問に入力する1つのスペースのgrepには、次のようなものを使用します:
grep -e "^\s[^\s]" -e "[^\s]\s$" -e "[^\s]\s[^\s]" a.txt
またはPOSIXバリアントの場合:
grep -e "^ [^ ]" -e "[^ ] $" -e "[^ ] [^ ]" a.txt
または読みにくいPOSIXバリアント:
grep "\(^\|[^ ]\)\ \([^ ]\|$)" a.txt
複数の隣接するスペースを含む行を除外する場合、これには、スペースが1つ必要であり、前にスペースがなく、後にスペースがないことが明示的に必要です。
また、grepのすべてのバージョンが「\ s」正規表現コントロールをサポートしているわけではないことにも注意してください。
コメント
- 拡張正規表現を有効にするPOSIX指定の
-E
オプションを使用すると、最後の例からこれらのバックスラッシュをすべて省略して読みやすさを向上させることができます。grep -E '(^|[^ ]) ([^ ]|$)' a.txt
いずれの場合も、スペースの前のバックスラッシュは'必要ではなく、'最後の閉じ括弧の前に1つ欠けています。また、\s
を理解するバージョンのgrep
の場合、非スペース[^\s]
から\S
- ただし、これも機能します、[[:blank:]]
回答
見つけたと思います:
grep "\+[[:space:]]\+" a.xml
回答
バリアント2は2つのスペースしか検出しません。"\s"
代わりに、両方のバリアントが機能します。
これは自分で簡単にテストできるので、実際の質問は何ですか?
コメント
- スペースが2つしかないのはなぜですか?どんなスペースにも一致すると思います。
- @Gnouc:彼が書いたバリアント2
'\s '
は、スペースを追加したため、少なくとも2つのスペースに一致します。文字グループ\s
の後の文字。 - あなた'正解です、私は'
\s
の後にスペースが表示されません、私の間違いです。
cat
を不必要に使用します。最初の文字はgrep ' ' a.txt
と記述でき、2番目の文字も同様に変更できます。\s
もtab、return、垂直タブ、フォームフィード、および技術的には改行。スペースとタブのみを一致させる場合は、[[:blank:]]
または[ \t]
を使用します。-m
オプション)を1つに制限します…