Ste*_*eve 4 regex bash grep escaping quoting
我正在尝试使用以下正则表达式运行grep:
(?<!key:)(?<!orKey:)(?<!isEqualToString:)\@\"[A-Za-z0-9]*\"
Run Code Online (Sandbox Code Playgroud)
第一次尝试:
$ grep -r -n -H -E (?<!key:)(?<!orKey:)(?<!isEqualToString:)\@\"[A-Za-z0-9]*\" ./
-bash: !key: event not found
Run Code Online (Sandbox Code Playgroud)
好的,所以我需要逃避"!"的...
$ grep -r -n -H -E (?<\!key:)(?<\!orKey:)(?<\!isEqualToString:)\@\"[A-Za-z0-9]*\" ./
-bash: syntax error near unexpected token `('
Run Code Online (Sandbox Code Playgroud)
好的,所以我需要逃避"("s ...
$ grep -r -n -H -E \(?<\!key:\)\(?<\!orKey:\)\(?<\!isEqualToString:\)\@\"[A-Za-z0-9]*\" ./
-bash: !key:)(?: No such file or directory
Run Code Online (Sandbox Code Playgroud)
好的,所以我需要引用字符串?
$ grep -r -n -H -E '\(?<\!key:\)\(?<\!orKey:\)\(?<\!isEqualToString:\)\@\"[A-Za-z0-9]*\"' ./
Run Code Online (Sandbox Code Playgroud)
返回没有结果...但我尝试了一个更简单的正则表达式,它没有负面后瞻断言,它运行良好...我也使用TextWrangler与这个正则表达式,它确实有效,所以我只能假设我这里在命令行上做错了什么.
编辑:
如果我使用-p选项:
$ grep -r -n -H -E -P '\(?<\!key:\)\(?<\!orKey:\)\(?<\!isEqualToString:\)\@\"[A-Za-z0-9]*\"' ./
grep: conflicting matchers specified
Run Code Online (Sandbox Code Playgroud)
应匹配的文件内容示例:
NSString * foo = @"bar";
Run Code Online (Sandbox Code Playgroud)
不匹配的文件内容示例:
return [someDictonary objectForKey:@"foo"];
Run Code Online (Sandbox Code Playgroud)
在它的核心,你需要引用整个字符串''.(如果您有附上""了!会给你悲伤).然后你只需要'在你的正则表达式内部转义(如果有的话).
你也想要-P(perl)而不是-E(egrep)正则表达式.
grep -r -n -H -P '(?<!key:)(?<!orKey:)(?<!isEqualToString:)\@\"[A-Za-z0-9]*\"' ./
Run Code Online (Sandbox Code Playgroud)