Bash:在反引号中转义角色

时间:2010-08-13 17:05:12

标签: bash command-line grep backticks

我正在尝试在bash命令中使用反引号来转义字符,主要是处理文件名中导致命令失败的空格。

我到目前为止的命令是:

grep -Li badword `grep -lr goodword *`

此命令应该生成一个文件列表,其中不包含“badword”一词,但包含“goodword”。

2 个答案:

答案 0 :(得分:3)

goodword grep输出的文件数量达到命令行长度限制时,即使您获得了转义权限,您的方法也会遇到问题。最好将第一个grep的输出传输到第二个grep,就像这样

grep -lr -- goodword * | xargs grep -Li -- badword

这将正确处理包含空格的文件,但如果文件名中包含换行符,则会失败。至少GNU grepxargs支持用NUL字节分隔文件名,比如

grep -lrZ -- goodword * | xargs -0 grep -Li -- badword

编辑:添加了双短划线--grep次调用,以避免某些文件名以-开头并被grep解释为附加选项的情况。< / p>

答案 1 :(得分:1)

如何将其重写为:

grep -lr goodword * | grep -Li badword