2017-10-18 3 views
0

こんにちは、私はgrep行を2回繰り返した単語を持つ方法を知りたいです。 2つの単語の間のスペースは明らかに説明されなければならず、私はgrepが当然であると信じる大文字と小文字を区別する必要があります。grepやegrepの単語を2回続けて表示するには?

私は答えを求めているのではなく、どうやって理解して理解したいのですか?だから誰も応答することができますあなたはまた、行が何を言っているか、パターンが何をしているか説明してください。私はgrepbashに基本的に中間的な把握を持っていますが、まだgrepのすべての複雑さと相関する構文を学んでいます。すべての助けが大いに感謝されるだろう。

これは、私はまた、私がここでやっている正確に何が不明だが、私は...笑

grep '.*\|.*\| ' 

おかげですべてを得ていない限り近いです! 乾杯!

答えて

0

あなたはgrep -E '(\<[^[:blank:]]+\>).*\1'

\<\>は、単語の境界を表して使用します。非空白文字のシーケンスと共に、それは単一の単語を形成する。次に、\1は最初のキャプチャ括弧セットを呼び出します。

+0

多くのツールでは、わずかに異なる正規表現が使用されています。 GNUツール(grep、awkなど)の正規表現は、https://www.gnu.org/software/gnulib/manual/html_node/Regular-expression-syntaxes.html#Regular-expression-syntaxesにあります。 –

0

\ 1は、一致した最初の文字列と一致したすべての文字列と一致します。これは、最初の文字列と一致したパターンと同じパターンではありません。したがって、\ bがキャプチャ括弧内にあっても、単語境界にマッチした最初のキャプチャはもはや意味がありません。

2番目のインスタンスを単語境界に配置したい場合は、そうする必要があります。

また、正規表現を使用すると、小さなa-zと大きなA-Z単語がすべて欲しいと言うことができます。 +を使うことによっても、上記の文字が少なくとも1回以上一致すると言います。

egrep "(\b[a-zA-Z]+) \1\b" file.txt 

これは、2回使用されるすべての単語を表示します。

grep -E "(\b[a-zA-Z]+) \1\b" file.txt 

このコマンドは、grepを使いたい場合にも有効です。 grep -Eは、拡張正規表現を使用することを意味します。つまり、egrepと同じです。

関連する問題