2017-10-18 141 views
0

嗨,我想知道如何grep線連續兩次重複單詞。這兩個詞之間的空格顯然必須考慮在內,並且必須是區分大小寫的,我相信grep當然是。如何grep或egrep連續出現兩次的單詞?

我不只是想要一個答案,而是我想知道如何去做並理解它。所以任何人都可以回答,請你解釋一下這條線是在說什麼,或者模式在做什麼。我對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在捕獲括號內。

如果你想要第二個實例也在一個字邊界上,那麼你必須這樣說。

同樣通過使用正則表達式,我們可以說我們需要所有小的a-z和大的A-Z單詞。同樣通過使用+我們說前面的字符至少匹配1次或更多次。

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

這會告訴你所有使用兩次的單詞。

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

如果您寧願使用grep,該命令也可以使用。 grep -E表示它使用擴展的正則表達式。所以它和egrep一樣。