对于第一个问题,例如,
A
B
C
B
D
需要在B
的 FIRST MATCH 之后插入E.
A
B
E
C
B
D
对于第二个问题的例子,
A
B
C
B
D
E
F
第二次模式匹配后,只需要删除D和E,2行。
A
B
C
B
F
答案 0 :(得分:1)
这可能适合你(GNU sed):
sed -e '/B/!b;x;s/^/x/;/^x\{1\}$/{x;aE' -e 'b};x' file
sed -e '/B/!b;x;s/^/x/;/^x\{2\}$/{x;n;N;d};x' file
这两种解决方案可以分为三个部分:
如果正则表达式不正确,请继续正常
如果正则表达式为真,则通过在每次出现时将一个字符(x
)附加到保留空间来计算它。
计数上的条件(在第一个解决方案中,1和第二个解决方案,2)执行操作。
在第一个解决方案中:
E
在第二个解决方案中:
如果条件不成立,请继续正常。
N.B。可以使用范围缩短第一个解决方案:
sed '0,/B/!b;//aE' file
或不允许GNU扩展(0,address
)
sed -e '/B/{aE' -e ':a;n;ba}' file
答案 1 :(得分:0)
使用
完成实施sed --version
sed (GNU sed) 4.2.2
<强> Q1:强>
$ more input
A
B
C
B
D
B
D
<强> sed的:强>
$ sed -n -e '/^B$/!{p};/^B$/{p;x;/^$/{a E' -e '}}' input
A
B
E
C
B
D
B
D
<强> Q2:强>
$ more input2
A
B
C
B
D
E
F
<强> sed的:强>
$ sed -n '/^B$/{p;H};/^B$/!{x;/B\nB1\?$/{s/.*/&1/;x;b;};x;p}' input2
A
B
C
B
F