如何解决sed在PATTERN1和PATTERN2或PATTERN3之间打印文本
sed可以在PATTERN1和PATTERN2或PATTERN3之间打印文本吗?例如,对于下面的两个示例,我希望显示输出:
样本1
Not lemur
Lemur
Ring-Tailed
Mouse
Catta
Fusa
Bad
示例2
Not lemur
Lemur
Ring-Tailed
Mouse
Catta
所需的输出:
Lemur
Ring-Tailed
Mouse
Catta
到目前为止,我的sed命令是sed -n '/^Lemur/,$p'
,但是它还会显示“ Fusa \ n Bad”(我不想要)。 sed是否具有“或”功能,例如'/^Lemur/,($|^[^\s])p'
,目的是从Lemur匹配到输入的末尾,或者不是以空格开头的行。另外,我只想打印以空格开头的第一个模式(狐猴)之后的行(即,我不想在第一个示例中打印“ Fusa”)。
解决方法
sed是对单个字符串执行s/old/new/
的最佳工具。除此之外,只要使用awk。
$ awk '/^\S/{f=/^Lemur/} f' file1
Lemur
Ring-Tailed
Mouse
Catta
$ awk '/^\S/{f=/^Lemur/} f' file2
Lemur
Ring-Tailed
Mouse
Catta
如果您没有\S
的GNU awk,则只需使用[^[:space:]]
。
这可能对您有用(GNU sed):
sed ':a;/^Lemur/{:b;n;/^\S/ba;bb};d' file
标记周期的开始。
如果一行以单词Lemur
开头:
- 标记循环的开始。
- 打印当前行,然后将下一行提取到模式空间中。
- 如果模式空间以非空格字符开头,请转到循环的开头并重复。
- 否则转到循环的开头。
所有其他行都将删除。
替代方法:
sed -n '/^\S/{:a;x;/^Lemur/p;$q;x;h};//!H;$ba' file
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。