如何解决sed命令,该命令组合了两个相互依赖的命令
我需要sed命令的帮助,该命令将生日行复制到标准输出,并删除所有以“ A”开头的行。 假设我的sample.txt文件如下所示:
A birthday is very much celebrated.
Today is my birthday.
I can celebrate my birthday.
A man can do anything.
这是示例输出:
今天是我的生日。
我可以庆祝我的生日。
因此,对于生日行:
sed -n /birthday/p sample.txt
并删除以“ A”开头的行:
sed -n '/^A/!p' sample.txt
现在,我对如何将这两行结合起来以使它们能够根据问题工作感到困惑。
解决方法
您想要的是pipe operator |
。通过将STDOUT连接到STDIN,将命令的输出向左移,并将其“传递”到右侧的命令。
因此,您可以这样做:
sed -n /birthday/p sample.txt | sed -n '/^A/!p'
编辑:格式化
,使用sed,不需要管道-在打印包含“生日”的行之前,您可以删除以“ A”开头的行:
sed -n '/^A/d; /birthday/p' file
或使用sed的默认打印操作(不通过-n
选项将其禁用):删除不包含“生日”的行。任何未删除的行将被打印到标准输出。
sed '/^A/d; /birthday/!d' file
使用此方法,可以在不影响逻辑的情况下交换地址的顺序:/birthday/!d; /^A/d
产生相同的输出。
这可能对您有用(GNU sed):
sed '/^A/d;/birthday/!d' file
如果一行以A
开头,则将其删除,并删除其他没有生日的行。
或者:
sed -n '/^[^A].*birthday/p' file
打印不以A
开头且包含birthday
的行。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。