我想从文件中删除包含特定字符串的行。如何在不使用awk
的情况下执行此操作?我尝试使用sed
但我无法实现它。
答案 0 :(得分:42)
这应该这样做:
sed -e s/deletethis//g -i *
sed -e "s/deletethis//g" -i.backup *
sed -e "s/deletethis//g" -i .backup *
它将在所有文件(*
)中替换所有出现的“deletethis”和“”(无),并对其进行编辑。
在第二种形式中,模式可以编辑得更安全一些,它可以备份任何修改过的文件,后缀为“.backup”。
第三种形式是某些版本的sed
喜欢它的方式。 (例如Mac OS X)
man sed
了解更多信息。
答案 1 :(得分:17)
sed -i '/pattern/d' file
使用'd'删除一行。这至少适用于GNU-Sed。
如果您的Sed没有该选项,要更改文件,也许您可以使用中间文件来存储修改:
sed '/pattern/d' file > tmpfile && mv tmpfile file
直接写入源代码通常不起作用:sed '/pattern/d' file > file
所以如果你有疑问,请在试用之前复制一份。
答案 2 :(得分:0)
尝试vim-way:
ex -s +"g/foo/d" -cwq file.txt