bmk*_*bmk 2 regex linux shell sed range
我不知道是否有一sed
打印范围内的行,由图案确定-only方式进行匹配,除了端模式匹配的一个最后一行.
考虑以下示例.我有一个文件
line 1
line 2
line 3
ABC line 4
+ line 5
+ line 6
+ line 7
line 8
line 9
line 10
line 11
line 12
Run Code Online (Sandbox Code Playgroud)
我希望得到所有以ABC
(包括)开头的所有内容以及以+
:
ABC line 4
+ line 5
+ line 6
+ line 7
Run Code Online (Sandbox Code Playgroud)
我试过了
sed -n '/ABC/I,/^[^+]/ p' file
Run Code Online (Sandbox Code Playgroud)
但这给了一行太多:
ABC line 4
+ line 5
+ line 6
+ line 7
line 8
Run Code Online (Sandbox Code Playgroud)
sed
离开最后一行的最简单方法是什么?
可能有更好的方法,但我可以拿出这个sed 1班轮:
sed -rn '/ABC/,/^[^+]/{/(ABC|^\+)/!d;p;}' file
Run Code Online (Sandbox Code Playgroud)
sed -n '/ABC/,/^[^+]/{x;/^$/!p;}' file
Run Code Online (Sandbox Code Playgroud)
sed -n '/ABC/I{h;:A;$!n;/^+/{H;$!bA};g;p;}' file
Run Code Online (Sandbox Code Playgroud)