3

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

find / -maxdepth 1 -xdev -type f -exec grep -i "stringtofind" -l {} \; -exec sed -i '/./d' {} \;

我已尝试对其进行修改以仅删除找到字符串但无法使其正常工作的行。

例如测试文件:

blah blah blah
blah blah blah teststring
teststringblah blah blah
blah blah blah

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

blah blah blah
blah blah blah
4

2 回答 2

7

grep此处不需要删除包含(不区分大小写)的sed -i '/teststring/Id' file所有行,因此只需将其与:fileteststring find

find . -maxdepth 1 -xdev -type f -exec sed -i '/teststring/Id' {} \;

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
于 2012-12-13T12:21:46.237 回答
0

您无法使用标准脚本工具就地编辑文件。您可以创建一个新文件,然后用新文件替换旧文件:

#get a temporary filename
tmp_file_name=$(mktemp)
grep -v teststring $my_file_name > $tmp_file_name
mv $tmp_file_name $myfile_name
于 2012-12-13T12:24:26.640 回答