テキスト内の1つのスペースをgrepする方法は?

cat a.txt| grep " " 

または

cat a.txt| grep "\s " 

コメント

  • どちらの場合もcatを不必要に使用します。最初の文字はgrep ' ' a.txtと記述でき、2番目の文字も同様に変更できます。
  • \sもtab、return、垂直タブ、フォームフィード、および技術的には改行。スペースとタブのみを一致させる場合は、[[:blank:]]または[ \t]を使用します。
  • gnu grepを使用すると、次のことができます。一致する数(-mオプション)を1つに制限します…
  • これはより単純なegrep " \ s " a.txt

回答

必要に応じて質問に入力する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の後にスペースが表示されません、私の間違いです。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です