我试图在我的 bash 命令中转义反引号中的字符,主要是为了处理导致我的命令失败的文件名中的空格。
到目前为止我的命令是:
grep -Li badword `grep -lr goodword *`
此命令应生成不包含单词“badword”但包含“goodword”的文件列表。
我试图在我的 bash 命令中转义反引号中的字符,主要是为了处理导致我的命令失败的文件名中的空格。
到目前为止我的命令是:
grep -Li badword `grep -lr goodword *`
此命令应生成不包含单词“badword”但包含“goodword”的文件列表。
你的方法,即使你得到了正确的转义,当输出的文件数量goodword
grep
达到命令行长度的限制时,也会遇到问题。最好将第一个的输出通过管道传输grep
到第二个grep
,就像这样
grep -lr -- goodword * | xargs grep -Li -- badword
这将正确处理其中包含空格的文件,但如果文件名中有换行符,它将失败。至少 GNUgrep
并xargs
支持用 NUL 字节分隔文件名,像这样
grep -lrZ -- goodword * | xargs -0 grep -Li -- badword
编辑:在调用中添加了双破折号--
以grep
避免某些文件名以开头-
并被解释grep
为附加选项的情况。
如何将其重写为:
grep -lr goodword * | grep -Li badword