假设一个文件包含以下内容:
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可以更有效地解决此问题,请告诉我如何做。
答案 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