首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何从文本文件中删除包含特定字符串的所有行?

如何从文本文件中删除包含特定字符串的所有行?
EN

Stack Overflow用户
提问于 2011-03-24 03:46:07
回答 19查看 2.1M关注 0票数 2.1K

如何使用sed删除文本文件中包含特定字符串的所有行?

EN

回答 19

Stack Overflow用户

回答已采纳

发布于 2011-03-24 03:48:46

要删除该行并将输出打印到标准输出,请执行以下操作:

代码语言:javascript
复制
sed '/pattern to match/d' ./infile

要直接修改文件-不适用于BSD sed:

代码语言:javascript
复制
sed -i '/pattern to match/d' ./infile

相同,但适用于BSD sed (Mac和FreeBSD) -不适用于GNU sed:

代码语言:javascript
复制
sed -i '' '/pattern to match/d' ./infile

直接修改文件(并创建备份)-适用于BSD和GNU sed:

代码语言:javascript
复制
sed -i.bak '/pattern to match/d' ./infile
票数 3.2K
EN

Stack Overflow用户

发布于 2011-03-24 07:57:08

除了sed之外,还有许多其他方法可以删除带有特定字符串的行

AWK

代码语言:javascript
复制
awk '!/pattern/' file > temp && mv temp file

拼音(1.9+)

代码语言:javascript
复制
ruby -i.bak -ne 'print if not /test/' file

Perl

代码语言:javascript
复制
perl -ni.bak -e "print unless /pattern/" file

Shell (bash 3.2及更高版本)

代码语言:javascript
复制
while read -r line
do
  [[ ! $line =~ pattern ]] && echo "$line"
done <file > o
mv o file

GNU grep

代码语言:javascript
复制
grep -v "pattern" file > temp && mv temp file

当然还有sed (打印反转比实际删除更快):

代码语言:javascript
复制
sed -n '/pattern/!p' file
票数 685
EN

Stack Overflow用户

发布于 2012-11-02 10:37:07

您可以使用sed替换文件中的行。然而,它似乎比使用grep将倒数转换成第二个文件,然后将第二个文件移到原始文件上要慢得多。

例如:

代码语言:javascript
复制
sed -i '/pattern/d' filename      

代码语言:javascript
复制
grep -v "pattern" filename > filename2; mv filename2 filename

无论如何,第一个命令在我的机器上花费的时间要长3倍。

票数 292
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5410757

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档