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

如何使用sed命令从文件中删除包含特定字符串的行
EN

Stack Overflow用户
提问于 2013-04-20 00:24:11
回答 3查看 4K关注 0票数 2

我有以下文件:

代码语言:javascript
运行
复制
#!example
#!toto
example
#example
;example
toto
example

除了以"#!"开头的行之外,我想删除包含字符串"example"的行。

因此,结果文件应该是:

代码语言:javascript
运行
复制
#!example
#!toto
toto

如何仅使用sed命令来完成此操作?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-04-20 00:39:29

下面这行如何:

代码语言:javascript
运行
复制
 sed '/^#!/n;/example/d' file

使用您的示例文本进行测试:

代码语言:javascript
运行
复制
kent$  cat file
#!example
#!toto
example
#example
;example
toto
example

kent$  sed '/^#!/n;/example/d' file
#!example
#!toto
toto

如果你喜欢,awk也可以这样做:

代码语言:javascript
运行
复制
kent$  awk '/^#!/ || !/example/' file                                                                                                                 
#!example
#!toto
toto

编辑

sed:

如果行与starting with #!匹配,则停止处理,转到上面的下一行检查失败(与#!不匹配),检查是否包含example,如果包含,则删除d (不在输出中打印)

awk

  • 使用以下命令打印所有行:不包含example.

  • #!或(||)开头

性能:

我真的分不清。因为这个要求非常简单。您可以构建一个很大的文件,然后使用time自己进行比较。

票数 4
EN

Stack Overflow用户

发布于 2013-04-20 00:25:53

如果只想保留以#!开头的行

代码语言:javascript
运行
复制
$ sed '/#!/!d' foo.sh
#!example
#!toto
票数 2
EN

Stack Overflow用户

发布于 2013-04-20 05:58:07

这可能适用于您(GNU sed):

代码语言:javascript
运行
复制
sed '/#!/b;/example/d' file

这将打印所有包含#!的行和除example之外的所有其他行。

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

https://stackoverflow.com/questions/16109207

复制
相关文章

相似问题

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