我试图在一个文件上运行一个grep正则expression式,在那里我必须排除出现“00”和“0”的行。 我想出了这个expression方式:
grep -a -E \"stored\"\:\ \"\*123\*(?!00)[0-9]{2,5}\#\" $filename
但是当我试图用bash运行它时,我得到了
-bash !00: event not found ,或者(一旦我input了set +H ),
-bash: syntax error near unexpected token ('`
请问我需要做什么才能在bash中正确地逃避这个正则expression式?
你得到一个错误信息,因为你没有逃脱! ,这在shell中有着特殊的含义。 要使用它作为grep模式参数的一部分,必须引用它或转义它。
而不是逐一引用每一个特殊字符,把整个模式放在单引号或双引号(取决于你的目的)是很容易的,例如:
grep -a -P '"stored": "*123*(?!00)[0-9]{2,5}#"'
另外请注意,我用-Preplace了-E ,因为在grep扩展正则expression式的典型实现中,负向前瞻(?!...)不起作用。 -P标志启用Perl正则expression式,应该支持这个。