如何使用sed删除文本文件中包含特定字符串的所有行?
当前回答
在控制台中显示处理过的文本
cat filename | sed '/text to remove/d'
将处理过的文本保存到文件中
cat filename | sed '/text to remove/d' > newfile
将已处理的文本信息附加到现有文件
cat filename | sed '/text to remove/d' >> newfile
要处理已处理的文本,在这种情况下,请删除已删除内容的更多行
cat filename | sed '/text to remove/d' | sed '/remove this too/d' | more
more将一次显示一页的文本块。
其他回答
您也可以使用此选项:
grep -v 'pattern' filename
这里,-v将只打印图案以外的图案(这意味着反转匹配)。
要删除该行并将输出打印为标准输出,请执行以下操作:
sed '/pattern to match/d' ./infile
要直接修改文件,请执行以下操作:
sed -i '/pattern to match/d' ./infile
相同,但对于BSD sed(Mac OS X和FreeBSD)-不适用于GNU sed:
sed -i '' '/pattern to match/d' ./infile
要直接修改文件(并创建备份),请使用BSD和GNU sed:
sed -i.bak '/pattern to match/d' ./infile
我在Mac上挣扎着。另外,我需要使用变量替换来完成。
所以我使用了:
sed-i“”/$pattern/d“$文件
其中$file是需要删除的文件,$pattern是要匹配删除的模式。
我从评论中选择了“”。
这里需要注意的是在“/$pattern/d”中使用双引号。当我们使用单引号时,变量不起作用。
您可以使用good-old ed以与使用ex的答案类似的方式编辑文件。在这种情况下,最大的区别是ed通过标准输入接受命令,而不是像ex can那样作为命令行参数。在脚本中使用它时,通常的方法是使用printf将命令传递给它:
printf "%s\n" "g/pattern/d" w | ed -s filename
或与heredoc:
ed -s filename <<EOF
g/pattern/d
w
EOF
perl -i -nle'/regexp/||print' file1 file2 file3
perl -i.bk -nle'/regexp/||print' file1 file2 file3
第一个命令在原地(-i)编辑文件。
第二个命令执行相同的操作,但通过在文件名中添加.bk来保留原始文件的副本或备份(.bk可以更改为任何内容)。