我正在尝试在bash命令中使用反引号来转义字符,主要是处理文件名中导致命令失败的空格。
我到目前为止的命令是:
grep -Li badword `grep -lr goodword *`
此命令应该生成一个文件列表,其中不包含“badword”一词,但包含“goodword”。
答案 0 :(得分:3)
当goodword
grep
输出的文件数量达到命令行长度限制时,即使您获得了转义权限,您的方法也会遇到问题。最好将第一个grep
的输出传输到第二个grep
,就像这样
grep -lr -- goodword * | xargs grep -Li -- badword
这将正确处理包含空格的文件,但如果文件名中包含换行符,则会失败。至少GNU grep
和xargs
支持用NUL字节分隔文件名,比如
grep -lrZ -- goodword * | xargs -0 grep -Li -- badword
编辑:添加了双短划线--
到grep
次调用,以避免某些文件名以-
开头并被grep
解释为附加选项的情况。< / p>
答案 1 :(得分:1)
如何将其重写为:
grep -lr goodword * | grep -Li badword