一起使用 find、grep 和 sed

use*_*981 4 linux grep sed find

我试图找到所有出现的具有指定字符串的文件,然后清除所有这些文件的内容。因此,其中包含“stringtofind”的文件随后将是一个空文件。

为此,我尝试了以下操作,但出现错误:

出现以下错误: find: missing argument to `-exec'

 find / -maxdepth 1 -xdev -type f -exec grep -i "stringtofind" -l -exec sed -i '/./d'
Run Code Online (Sandbox Code Playgroud)

使用以下我得到错误:

grep: /nis

/tset.any

/test2.file

/测试.txt

: 没有这样的文件或目录 sed: 没有输入文件

find / -maxdepth 1 -xdev -type f -print | xargs -0 grep -i "stringtofind" -l | xargs sed -i '/./d'
Run Code Online (Sandbox Code Playgroud)

nul*_*ion 5

缺少参数的 find 命令非常接近工作。尝试:

find / -maxdepth 1 -xdev -type f -exec grep -i "stringtofind" -l {} \; -exec sed -i '/./d' {} \;
Run Code Online (Sandbox Code Playgroud)

您只需要在每个-exec操作的末尾添加一个反斜杠转义分号,并添加{}以使其知道在哪里替换文件名。