1

我试图在我的 bash 命令中转义反引号中的字符,主要是为了处理导致我的命令失败的文件名中的空格。

到目前为止我的命令是:

grep -Li badword `grep -lr goodword *`

此命令应生成不包含单词“badword”但包含“goodword”的文件列表。

4

2 回答 2

3

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

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

这将正确处理其中包含空格的文件,但如果文件名中有换行符,它将失败。至少 GNUgrepxargs支持用 NUL 字节分隔文件名,像这样

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

编辑:在调用中添加了双破折号--grep避免某些文件名以开头-并被解释grep为附加选项的情况。

于 2010-08-13T17:21:17.697 回答
1

如何将其重写为:

grep -lr goodword * | grep -Li badword
于 2010-08-13T17:08:00.397 回答