使用grep查找带括号的字符串

时间:2013-09-19 08:59:33

标签: unix grep

我在使用grep命令时遇到了一些问题。我的文件夹中有以下两个文件:

TEST.DAT:

fdf
bla(fd_bla_bla) =&
bdf bla

test2.dat

fd
fd
fij
d
bla(fdf)

fdjk
bla

现在我用

搜索带有括号的bla
grep 'bla(*)' *

但它只是给了我第一个文件的条目......你知道为什么吗?

7 个答案:

答案 0 :(得分:9)

您需要使用正则表达式来进行匹配。

egrep "bla\(.*\)" *.dat

会给出正确的结果。

答案 1 :(得分:3)

您的grep 'bla(*)' *无法使用,因为它会在bla)之后查找bla(((((((()(,即{0}或bla )

只是这样做:

grep '\bbla(' *.dat
  • 默认情况下,grep使用BRE,因此模式中的(将匹配文字(
  • \b(字边界)会使grep匹配foo bla(..)bla(xx),但不会foobla(xxx)

答案 2 :(得分:2)

grep -F "bla(" 

这将告诉grep使用特殊字符作为常规(固定)字符串。

答案 3 :(得分:1)

您只需要.*而不是*

在正则表达式中.*匹配任意长度为0或更长的字符串。 shell GLOB使用*来匹配任意搜索的文本,但grep不使用GLOB

grep 'bla(.*)' *.dat

字边界的OR:

grep '\<bla(.*)' *.dat

或使用awk:

awk '/bla\(.*\)/{print FILENAME ":" $0}' *.dat

答案 4 :(得分:1)

另一个解决方案是,如果你的字符串是固定字符串并且它包含括号。所以在grep -F的帮助下你可以修改你的字符串,它将按原样进行搜索。     cat enb.txt | grep -F '[PHY][I]UE' ** cat enb.txt是我想要捕获的文件名。 grep -F '[PHY][I]UE' grep -F使字符串'[PHY][I]UE'固定。

试试这个我希望它能起作用

答案 5 :(得分:0)

perl -lne 'print if(/bla\(.*\)/)' your_file

答案 6 :(得分:0)

$ grep "bla(" *

应该有效。 (不需要进行转义,因为它表示我们不需要它的正则表达式中的分组。

$ cat > test7
fdf
bla(fd_bla_bla) =&
bdf bla


$ cat > test8
fd
fd
fij
d
bla(fdf)

fdjk
bla

$ grep "bla(" *
test7:bla(fd_bla_bla) =&
test8:bla(fdf)