Sed 用于将文本从开头提取为字符串



我有这样的输入:

xxxx1
xxxx2
xxxx3
END
xxxx4
xxxx5

我想要这个:

xxxx1
xxxx2
xxxx3

我试过了。

<<input>> | sed -n '/./,/^END/p' | sed '$d'

但我得到:

xxxx1
xxxx2
xxxx3
END
xxxx4

似乎"."在这里不起作用。

如果目标是获取所有数据直到END并且xxxx可以通过任何方式,则此awk应该执行以下操作:

<<input>> | awk '/END/ {exit} 1'
xxxx1
xxxx2
xxxx3
  • 如果找到END,请退出
  • 1始终为 true,并且由于没有操作,请执行默认操作,打印

这可能对你有用(GNU sed(:

sed '/^END$/Q' file

打印所有行,直到仅包含END行,然后退出。

另类:

sed -n '/^END$/q;p' file

这是一个使用awk的解决方案。

awk '/^xxxx/{f=1}/^END/{f=0;exit}{ if (f!=0){print $0}}' file

输出

xxxx
xxxx
xxxx

f=1设置一个标志以指示已找到起始值。只要设置了该标志值,(我们对其进行测试(if (f!=0),我们打印当前输入行。当找到终止值/^END/时,变量未设置,我们必须退出,因为在这种情况下,将再次找到起始值,并打印出来。

希斯

使用 POSIX sed:

sed '/^END/,$d'

sed -n '1,/^END/{/^END/!p}'

最新更新