2017-02-09 43 views
1

你如何使用grep来做一个像ABC='123'这样的模式的文本文件搜索?如何做一个grep正则表达式搜索单引号?

我目前使用:

grep -rnwi some/path -e "ABC\s*=\s*[\'\"][^\'\"]+[\'\"]" 

但这只能找到像ABC="123"文本。它会漏掉任何使用单引号的实例。我的正则表达式有什么问题?

+0

为BRE ,你需要使用'\ +'或者用'-E' op使用当前的正则表达式使用ERE – Sundeep

+0

@Sundeep'+'根本不在BRE中,但GNU grep BRE支持它作为扩展。 –

+0

@BenjaminW。因为OP使用'-r'我推定GNU grep – Sundeep

回答

1

您正在使用PCRE。所以,你需要-P标志。所以,使用此:

grep -rnwi some/path -P "ABC\s*=\s*[\'\"][^\'\"]+[\'\"]" 

我们不需要对字符类内单引号\\。所以,你的正则表达式也可以写为:

"ABC\s*=\s*['\"][^'\"]+['\"]" 

输入文件:

ABC="123" 
ABC='123' 

运行grep与PCRE:

grep -P "ABC\s*=\s*['\"][^'\"]+['\"]" input.txt 

输出:

ABC="123" 
ABC='123'