我有一个像这样的示例文件。
[unit id="20"]
...blah blah...
[/unit]
[unit id="AB 560"]
...
[/unit]
[unit id="205"]
...
[/unit]
[unit id="AB 580"]
...
[/unit]
[unit id="120"]
...
[/unit]
[unit id="AB 210"]
...
[/unit]
我想删除包含字符串“AB”的行和其后的10行。具体而言,[unit ...]
和[/unit]
之间将有10行。输出文件应如下所示:
[unit id="20"]
...blah blah...
[/unit]
[unit id="205"]
...
[/unit]
[unit id="120"]
...
[/unit]
注意:只会出现“AB”。没有其他字符/字符串。我需要一个可执行的unix shell脚本 - 请不要Perl。
答案 0 :(得分:4)
您只需找到AB
,然后删除此行以及其后的10行。正如@Lev Levitsky指出的那样,GNU sed
仅允许这样做:
sed '/AB/,+10 {d}' <infile>
如果要将修改应用于给定文件,只需添加标记-i
即可进行就地替换。请注意,正如@Jens所指出的,这是一个GNU
ism:
sed -i '/AB/,+10 {d}' <infile>
答案 1 :(得分:1)
您可能更愿意根据模式进行,而不仅仅是+ 10lines
。
perl -n -e 'unless(/^\[unit.*AB.*\]/../\[\/unit\]/) { print; }' tx
tx文件是
[unit id="20"]
20...blah blah...
[/unit]
[unit id="AB 560"]
AB...
[/unit]
[unit id="205"]
205 ...
[/unit]
[unit id="AB 580"]
AB...
[/unit]
[unit id="120"]
120...
[/unit]
[unit id="AB 210"]
AB...
[/unit]
给出
[unit id="20"]
20...blah blah...
[/unit]
[unit id="205"]
205 ...
[/unit]
[unit id="120"]
120...
[/unit]