2017-10-18 110 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一样。