搜索文件中的字符串,然后通过Shell脚本将其从此文件中删除

vir*_*tue 25 bash shell

我想从文件中删除包含特定字符串的行.如何在不使用的情况下执行此操作awk?我试图使用,sed但我无法实现它.

mvd*_*vds 46

这应该这样做:

sed -e s/deletethis//g -i *
sed -e "s/deletethis//g" -i.backup *
sed -e "s/deletethis//g" -i .backup *
Run Code Online (Sandbox Code Playgroud)

它将在所有文件(*)中用""(无)替换所有出现的"deletethis" ,并在适当的位置进行编辑.

在第二种形式中,模式可以编辑得更安全一些,它通过用".backup"后缀来备份任何修改过的文件.

第三种形式是某些版本sed喜欢它的方式.(例如Mac OS X)

man sed 欲获得更多信息.

  • 它确实有效.它回答了你的问题.如果你想简单地删除包含某个字符串的行,你可以使用`grep -v`. (6认同)
  • 这不起作用.这会删除字符串.我想删除包含此字符串的行 (2认同)

use*_*own 18

sed -i '/pattern/d' file
Run Code Online (Sandbox Code Playgroud)

使用"d"删除一行.这至少适用于GNU-Sed.

如果您的Sed没有选项,要更改文件,也许您可​​以使用中间文件来存储修改:

sed '/pattern/d' file > tmpfile && mv tmpfile file
Run Code Online (Sandbox Code Playgroud)

直接写入源代码通常不起作用:sed '/pattern/d' file > file所以如果你怀疑的话,在试用之前复制一份.

  • 这是原始问题的正确答案。出于安全原因,您可以使用 `-i.bak` 而不是仅仅使用 `-i` 来创建原始文件的备份。 (2认同)