Mat*_*hew 3 grep find xargs escape-characters
我想要的结果如下:递归搜索目录,在所有找到的文件中查找给定的字符串。以下命令是我通常的停靠港:
find ./ | xargs grep -ns 'foobar'
Run Code Online (Sandbox Code Playgroud)
但是,当foobar
有引号时,命令失败并>
在 shell 中给我一个提示。导致问题的具体命令如下:
find ./ | xargs grep -ns 'add_action(\'save_post\','
Run Code Online (Sandbox Code Playgroud)
我试图用反斜杠转义引号,但无济于事。这样做的正确方法是什么?
单引号以单引号结尾;中间的所有其他字符都按原样保留,包括反斜杠。因此无法在单引号之间嵌入单引号。(但您可以结束单引号,转义单引号,并开始一组新的单引号,如'Single quotes aren'\''t ever really embedded in single quotes.'
)
建议:当grep -r pattern .
可以在当前目录上递归grep时避免使用find+xargs 。
以下命令具有等效的行为:
grep -rns "add_action('save_post'," .
grep -rns 'add_action('\'save_post\', .
Run Code Online (Sandbox Code Playgroud)
最后一条命令被解释为:
'add_action('
-> add_action(
\'
-> '
save_post
-> save_post
\'
-> '
,
-> ,
连接这些部分,grep
命令接收参数add_action('save_post',
。