2

同じ小文字を 3 回続けて含む "words.txt" の行を見つけて出力する grep (または egrep) コマンドを作成しようとしています。文字の 3 つのオカレンスは、連続して ("mooo" のように) 表示されるか、1 つ以上のスペースで区切られて ("xx x" のように) 表示されますが、他の文字で区切られていません。

words.txt には以下が含まれます。

The monster said "grrr"!
He lived in an igloo only in the winter.
He looked like an aardvark.

コマンドは次のようになります。

grep -E '\b[^ ]*[[:alpha:]]{3}[^ ]*\b' 'words.txt'

これが間違っていることはわかっていますが、それを理解するのに十分な構文を知りません。grep を使用して、誰かが私を助けてくれませんか?

4

2 に答える 2

4

これはうまくいきますか?

grep '\([[:lower:]]\) *\1 *\1'

小文字を取り、それを[[:lower:]]記憶し\( ... \)ます。_*次に、任意の数のスペース(0 を含む)、記憶された文字\1、任意の数のスペース、記憶された文字との一致を試みます。以上です。

で実行して--color=auto、入力のどの部分が一致したかを確認できます。

于 2012-10-23T15:01:33.427 に答える
0

これを試して。\b単語境界 ( ) が "m" の前にあるため、これは "mooo" と一致しないことに注意してください。

grep -E '\b([[:alpha:]]) *\1 *\1 *\b' words.txt

[:alpha:]文字クラスの式です。正規表現文字セットとして使用するには、追加の括弧が必要です。あなたはそれを始めたように見えるので、すでにこれを知っているかもしれませんが、開いた括弧を閉じていません。

于 2012-10-23T15:07:05.817 に答える