如何使用sed删除文本文件中包含特定字符串的所有行?
发布于 2011-03-24 03:48:46
要删除该行并将输出打印到标准输出,请执行以下操作:
sed '/pattern to match/d' ./infile要直接修改文件-不适用于BSD sed:
sed -i '/pattern to match/d' ./infile相同,但适用于BSD sed (Mac和FreeBSD) -不适用于GNU sed:
sed -i '' '/pattern to match/d' ./infile直接修改文件(并创建备份)-适用于BSD和GNU sed:
sed -i.bak '/pattern to match/d' ./infile发布于 2011-03-24 07:57:08
除了sed之外,还有许多其他方法可以删除带有特定字符串的行
AWK
awk '!/pattern/' file > temp && mv temp file拼音(1.9+)
ruby -i.bak -ne 'print if not /test/' filePerl
perl -ni.bak -e "print unless /pattern/" fileShell (bash 3.2及更高版本)
while read -r line
do
[[ ! $line =~ pattern ]] && echo "$line"
done <file > o
mv o fileGNU grep
grep -v "pattern" file > temp && mv temp file当然还有sed (打印反转比实际删除更快):
sed -n '/pattern/!p' file发布于 2012-11-02 10:37:07
您可以使用sed替换文件中的行。然而,它似乎比使用grep将倒数转换成第二个文件,然后将第二个文件移到原始文件上要慢得多。
例如:
sed -i '/pattern/d' filename 或
grep -v "pattern" filename > filename2; mv filename2 filename无论如何,第一个命令在我的机器上花费的时间要长3倍。
https://stackoverflow.com/questions/5410757
复制相似问题