如何处理grep中的括号?

时间:2012-01-19 02:49:56

标签: bash grep

str具有以下模式:

1 abc (1 <something>)

例如:

1 abc (1 hello)
1 abc (1 shalom)
1 abc (1 hola)

如何使用<something>str中提取egrep

2 个答案:

答案 0 :(得分:8)

如果您只想提取<something>,那么我建议grep -P(perl regex):

grep -P -o '(?<=\(1 ).*?(?=\))' INPUTFILE

-o只返回匹配的部分<something>。正则表达式查找前面带有(1的文本,然后是)

您无法使用egrep执行此操作,因为它不支持外观。您要做的最好的事情是使用以下内容提取(1 <something>)

egrep -o '\(1 (.*)\)' INPUTFILE

[foo@bar ~]$ grep -P -o '(?<=\(1 ).*?(?=\))' INPUTFILE
hello
shalom
hola

[foo@bar ~]$ egrep -o '\(1 (.*)\)' INPUTFILE
(1 hello)
(1 shalom)
(1 hola)

答案 1 :(得分:1)

或者,您可以使用简单的awk单行代码。

awk -F"[ )]" '{print $(NF-1)}' filename

测试:

[jaypal:~/Temp] cat filename
1 abc (1 hello)
1 abc (1 shalom)
1 abc (1 hola)

[jaypal:~/Temp] awk -F"[ )]" '{print $(NF-1)}' filename
hello
shalom
hola