0
语法之间的匹配是这样的:sed命令:2的正则表达式
sed -n '/Regex1/,/Regex2/p'
但是这包括regex1的和Regex2被发现的线,我该怎么排除呢?
例如:
abcd-Regex1
BlaBlaBla
abcd-Regex2
然后我只想:BlaBlaBla
语法之间的匹配是这样的:sed命令:2的正则表达式
sed -n '/Regex1/,/Regex2/p'
但是这包括regex1的和Regex2被发现的线,我该怎么排除呢?
例如:
abcd-Regex1
BlaBlaBla
abcd-Regex2
然后我只想:BlaBlaBla
您可以awk
用一个简单的状态机做到这一点:
pax> echo 'abcd-Regex1
BlaBlaBla
abcd-Regex2' | awk '/Regex2/{e=0}{if(e){print}}/Regex1/{e=1}'
BlaBlaBla
它主要采用回波标识e
,每行按顺序执行以下命令:
/Regex2/{e=0}
找到终止行时会关闭回波。{if(e){print}}
打印行如果回声打开。/Regex1/{e=1}
当找到初始化行时会回显。如果必须只使用sed
,有是的方式,你可以将其通过另一sed
删除的起始和终止行做到这一点:
pax> echo 'asdf
abcd-Regex1
BlaBlaBla
abcd-Regex2' | sed -n '/Regex1/,/Regex2/p' | sed -e '/Regex1/d' -e '/Regex2/d'
BlaBlaBla
感谢小费,但出于好奇:有没有办法做到这一点白色的'sed'命令? – 3sdmx 2010-10-29 15:05:33
不是我所知道的。这并不意味着它无法完成,只是我不知道该怎么做。而且,鉴于使用'sed'而不是'awk'的系统是非常不寻常的,我宁愿使用更适合这项工作的工具。 – paxdiablo 2010-10-29 15:08:31
无论如何,我会继续搜索:) – 3sdmx 2010-10-29 15:10:19