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是否具有" or“特性,如'/^Lemur/,($|^[^\s])p',其目的是从Lemur匹配到输入的末尾,或者不以空格开头的行。另外,我只想打印以空格开头的第一个模式(Lemur)之后的行(也就是说,我不想在第一个示例中打印"Fusa“)。
发布于 2020-09-02 03:46:07
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,那么只需使用[^[:space:]]即可。
发布于 2020-09-02 10:53:21
这可能对您有用(GNU sed):
sed ':a;/^Lemur/{:b;n;/^\S/ba;bb};d' file标记周期的开始。
如果一行以单词Lemur开头
repeat.
所有其他行删除。
另一种选择:
sed -n '/^\S/{:a;x;/^Lemur/p;$q;x;h};//!H;$ba' filehttps://stackoverflow.com/questions/63698104
复制相似问题