Regex Sed将文本从开始提取为字符串

Regex Sed将文本从开始提取为字符串,regex,sed,Regex,Sed,我的意见如下: xxxx1 xxxx2 xxxx3 END xxxx4 xxxx5 我想要这个: xxxx1 xxxx2 xxxx3 我试过了 <<input>> | sed -n '/./,/^END/p' | sed '$d' 似乎是“.”在这里不起作用。这里有一个使用awk的解决方案 awk '/^xxxx/{f=1}/^END/{f=0;exit}{ if (f!=0){print $0}}' file 输出 xxxx xxxx xxxx f=1设置一

我的意见如下:

xxxx1
xxxx2
xxxx3
END
xxxx4
xxxx5
我想要这个:

xxxx1
xxxx2
xxxx3
我试过了

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

似乎是“.”在这里不起作用。

这里有一个使用
awk
的解决方案

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

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

IHTH

这可能适合您(GNU-sed):

打印所有行,直到一行只包含
结束
,然后退出

备选方案:

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

如果目标是获取所有数据,直到
结束
xxxx
可以通过任何方式完成,那么这个
awk
应该可以:

<<input>> | awk '/END/ {exit} 1'
xxxx1
xxxx2
xxxx3
|awk'/END/{exit}1'
三十一
三十二
三十三
  • 如果找到
    END
    ,则退出
  • 1
    始终为真,由于没有操作,请执行默认操作,即打印
使用POSIX sed:

sed'/^END/,$d'


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

不是sed用户。这是什么意思
'/./,/^END/p'
我想,
xxxx
可以是任何随机的东西。
sed -n '/^END$/q;p' file
<<input>> | awk '/END/ {exit} 1'
xxxx1
xxxx2
xxxx3