如何使用“ sed”在一行和另一行之间进行打印?

时间:2018-08-15 03:59:52

标签: sed

假设一个文件包含以下内容:

a
x
y
z
c
some to be omitted
a
b
c

我要打印所有在“ a”行和“ c”行之间的行(有和没有“ c”行都可以):

a
x
y
z
c
a
b
c

我尝试了sed命令:

sed -n '/a/{:my_tag /./p; N; /c/ t end; t my_tag; :end}'

它给了我输出:

a
a

命令中的N是否仅可工作一次?我看不到这里有任何循环。 sed的帮助信息有些混乱,似乎我做错了方向。

或者也许使用某些工具而不是sed可以更有效地解决此问题,请告诉我如何做。

2 个答案:

答案 0 :(得分:2)

请尝试以下操作(如果可以使用awk,则可以)。

awk '/^a/{flag=1} flag; /^c/{flag=""}'  Input_file

输出如下。

a
x
y
z
c
a
b
c

答案 1 :(得分:1)

使用sed:

sed -n '/^a$/,/^c$/p' file

sed '/^a$/,/^c$/!d' file

输出:

a
x
y
z
c
a
b
c