【发布时间】:2016-08-19 10:36:33
【问题描述】:
一个简单的sed 表达式用于从文本文件中提取由正则表达式分隔的行块,如下所示:
$ sed -n -e '/start-regex/,/end-regex/ p' input_file
这会从匹配start-regex的行中选择行,直到匹配end-regex的行。
匹配end-regex 的行可以这样排除:
$ sed -n -e '/start-regex/,/end-regex/ {/end-regex/d;p}
是否可以不重复end-regex 做到这一点?
如果可以省略最后一行,那么是否也可以省略第一行和/或最后一行而不重复正则表达式?
这个问题的原因是为了找到一种比重复复杂且难以阅读的表达式更有效的方法来解决问题。
这个问题是关于sed,特别是其中的一个实例。使用head、tail、awk 等管道可能有办法做到这一点,但问题是这是否可能仅使用sed。
有许多类似的问题,但他们要求针对特定用例的解决方案,而不是从源头处理一般问题。
任何解决方案都应该适用于 GNU sed。
【问题讨论】:
-
请参阅 How to select lines between two patterns? 并为此提供 sed 和 awk 解决方案。
-
这很有趣,但它重复了正则表达式。
-
所以 不重复
end-regex你的意思是用end-regex只写一次的方式编写sed命令,对吧? -
是的,我就是这个意思。
-
vim 允许使用
/pat1/+1,/pat2/-1,这取决于光标所在的位置和使用的模式。在 sed 中使用类似的模式肯定会很好
标签: sed