テキスト内のスペースを見つける方法。grepを使用していますか?


13

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

cat a.txt| grep ' '

または

cat a.txt| grep '\s '

7
cat両方のケースでの無償使用。最初のものを書くことができgrep ' ' a.txt、2番目のものも同様に変更できます。
MadHatter

1
\sタブ、リターン、垂直タブ、フォームフィード、および技術的には改行にも一致することに注意してください。スペースとタブのみを一致させる場合は、[[:blank:]]またはを使用します[ \t]
追って通知があるまで一時停止します。

gnu grepを使用すると、一致(-mオプション)の数を1つに制限できます
...-sendmoreinfo

これはより単純なegrep "\ s" a.txt

回答:


6

質問を入力するときに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'正規表現コントロールをサポートしているわけではないことに注意してください。


1
最後の例からこれらのバックスラッシュをすべて省略し、-E拡張正規表現を有効にするPOSIX指定のオプションを使用して読みやすさを向上させることができます。grep -E '(^|[^ ]) ([^ ]|$)' a.txtいずれの場合も、スペースの前のバックスラッシュは不要であり、最後の閉じ括弧の前に1つあります。また、grepそのバージョンの\s場合、非スペースの表現[^\s]\S
通知があるまで一時停止する

ただし、これも機能します、[[:blank:]]
Emax

4

私はそれを見つけたと思う:

grep  "\+[[:space:]]\+" a.xml

1

バリアント2は2つのスペースのみを検出します。'\s'代わりに使用すると、両方のバリアントが機能します。

これを自分で簡単にテストできますが、実際の質問は何ですか?


1
なぜ2つのスペースしか見つけられないのですか?どんなスペースにもマッチすると思います。
-cuonglm

1
@Gnouc:彼が書いたバリアント2 '\s 'は、文字グループの後にスペース文字を追加したため、連続した少なくとも2つのスペースに一致します\s
スヴェン

あなたは正しい、私は\s私の間違いの後、スペースが表示されません。
cuonglm
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.