如何grep整行,传递到sed,并删除该行?

use*_*981 3 linux grep sed find

以下命令将查找字符串的所有出现并删除找到此字符串的文件的内容.

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

我已经尝试修改它只是删除找到字符串的行但无法使其工作.

例如测试文件:

blah blah blah
blah blah blah teststring
teststringblah blah blah
blah blah blah
Run Code Online (Sandbox Code Playgroud)

它将删除第2行和第3行,并将文件保留为行之间没有间隙:

blah blah blah
blah blah blah
Run Code Online (Sandbox Code Playgroud)

Chr*_*our 7

grep这里不需要sed -i '/teststring/Id' file删除file包含的所有行teststring (不区分大小写),所以只需将它与find:

find . -maxdepth 1 -xdev -type f -exec sed -i '/teststring/Id' {} \;
Run Code Online (Sandbox Code Playgroud)

sed 演示:

$ cat file
blah blah blah
blah blah blah teststring
teststringblah blah blah
blah blah blah

$ sed '/teststring/Id' file
blah blah blah
blah blah blah
Run Code Online (Sandbox Code Playgroud)