用grep和“bounds”查找重复的字符串

时间:2014-05-17 21:03:48

标签: regex bash grep

我有一个文件test-matching.txt,如下所示:

ba
bababa
baba
babadooba

根据grep手册页,我应该能够使用表达式

获取除第一行之外的所有行
grep "ba{2,}" test-matching.txt

这应该匹配包含2个或更多" ba"的字符串实例的所有行。但是,当我运行它时,我没有输出。


首先,我尝试grep "ba" test-matching.txt只是为了确保它正常工作,它给了我所有四行作为输出。

我还尝试了以下方法,每个都没有输出:

  • 使用-e选项:grep -e "ba{2,}" test-matching.txt
  • 使用-e选项和单引号:grep -e 'ba{2,}' test-matching.txt
  • 使用-e选项和转义大括号:grep -e "ba\{2,\}" test-matching.txt
  • 没有-e选项和单引号:grep 'ba{2,}' test-matching.txt
  • 没有-e选项和转义大括号:grep "ba\{2,\}" test-matching.txt
  • 使用{2}代替{2,}:grep -e 'ba{2}' test-matching.txt
  • 使用{2}代替{2,}和-e选项:grep -e 'ba{2} test-matching.txt

匹配" ba"的所有行的正确方法是什么?连接2次或更多次?

2 个答案:

答案 0 :(得分:3)

如果要使用扩展正则表达式语法,请使用egrepgrep -E(不是grep -e)。如果要使用基本正则表达式语法,则需要反斜杠 - 转义大括号。最后,如果您想重复ba,则需要对egrep '(ba){2,}'grep '\(ba\)\{2,\}'进行分组,如果您更喜欢使用基本正则表达式。

答案 1 :(得分:2)

ba{2,}仅点击a

baa
baaa
baaaa
etc

您需要(ba){2,}才能使其适用于群组。

尝试:

egrep "(ba){2,}" file

grep "\(ba\)\{2,\}" file
bababa
baba
babadooba