之间的文本,所以我发现这个SED表达为获得独家的关键字的关键字之间的文本:使用SED获得两个关键词(而不是关键词本身)
cat example.txt | sed '/^KEYWORD1/,/^KEYWORD2/!d; //d'
其中一例。 TXT:
do
not
care
KEYWORD1
I
want
this
KEYWORD2
do
not
care
输出:
I
want
this
不过,我想了解知道是什么正在用这个表达。我的理解是,使用'模式范围'(如果这是不恰当的术语,请纠正我),当您第一次匹配时设置布尔值,并且仅在布尔值为true时才执行模式范围后面的命令。
然后是//d
其中//
应该表示最后匹配的表达式/正则表达式。因此,它是正确的,在这种情况下,带有图案的范围,逻辑如下:!
- 环
- 查找
/^KEYWORD1/
,设置布尔为true,用d命令进行不删除这条线,然后自从上次的正则表达式是/^KEYWORD1/
然后//d
实际上是/^KEYWORD1/d
它删除此行,则进入不删3个下一行和/^KEYWORD1/
没有在所述行因此没有被删除 - 查找
/^KEYWORD2/d
发现 - 布尔为真,则执行!d和然后
/^KEYWORD2/d
,因为这是最后的正则表达式中使用
所以在这一点上,我不知道如何前后线不打印,因为它不执行,除非模式范围标志命令(!d
)设置为true。
或者确实至少看看每一行的命令,并且由于第一个命令是反向删除,它会以某种方式更改逻辑以删除模式范围bool为false的所有其他行?
任何澄清如何这个sed表达式的作品将不胜感激。我已经读了this great resource上下,但仍不完全理解表达的所有细节。
如果将光标悬停在上面的sed标志上并选择info,您可以找到sed相关问题的巨大资源。也许[this](http://sed.sourceforge.net/sedfaq3.html#s3.3)链接也可能启发你。 – potong