Bash - 提取给定关键字的行块

时间:2016-09-29 09:21:04

标签: linux bash

我是bash的初学者。

假设我有一个文本文件sample.txt,其中包含

mercury
venus
earth
mars
jupiter
saturn
uranus
neptune
pluto

以及两个关键字earthsaturn

黄金是找到包含关键字的行(只有一行包含每个关键字),并输出中间的所有行,包括两个关键字行。

鉴于上述关键字earthsaturn和输入,预期输出为

earth
mars
jupiter
saturn

如果可能,请避免正则表达式。 反正有吗?

3 个答案:

答案 0 :(得分:1)

您可以使用awk或sed:

使用awk:

awk '/earth/,/saturn/' sample.txt

使用sed:

sed -n '/earth/,/saturn/p' sample.txt

答案 1 :(得分:0)

您可以访问Here以获取更多示例和测试用例。

awk '/earth/,/saturn/' planets.txt
    earth
    mars
    jupiter
    saturn

sed

sed -n '/earth/,/saturn/p' planets.txt
earth
mars
jupiter
saturn

答案 2 :(得分:0)

perl -lne 'print if(/earth/.../saturn/)' planets.txt

仅在两个关键字都存在时才获取数据的另一种解决方案。

 perl -lne '$f=1 if(/earth/);
            push @a,$_ if($f==1);
            if(/saturn/){print join "\n",@a;undef @a;$f=0}' 
            planets.txt