1

このようなサンプルファイルがあります。

[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行を削除したい。具体的には、 と の間に 10 行[unit ...]あり[/unit]ます。出力ファイルは次のようになります。

[unit id="20"]
...blah blah...
[/unit]
[unit id="205"]
...
[/unit]
[unit id="120"]
...
[/unit]

:「AB」のみが存在します。他の文字/文字列はありません。これには実行可能な UNIX シェル スクリプトが必要です。Perl は使用しないでください。

4

2 に答える 2

4

を見つけてAB、そのような行とそれに続く 10 行の両方を削除するだけです。@Lev Levitsky が指摘したように、これは次の場合にGNU sedのみ許可されます。

sed '/AB/,+10 {d}' <infile>

特定のファイルに変更を適用する場合は-i、インプレース置換用にフラグを追加するだけです。@Jens が指摘するように、これはGNUイズムであることに注意してください。

sed -i '/AB/,+10 {d}' <infile>
于 2013-02-23T13:29:51.703 に答える
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]
于 2013-02-23T13:51:09.397 に答える