0

私は、sedの良い候補と思われる明確に定義された問題を抱えています。

私の入力ファイルには、次の 2 つのトークンのいずれかが含まれています。

[FILE]また[LINE]

構造は次のようになります。

[FILE]: C:\Users\user\git\build.xml
[FILE]: C:\Users\user\git\dataload-pom.xml
[FILE]: C:\Users\user\git\local.properties
    [LINE]:  [job.mail.toAddress=]
    [LINE]:  [log.mail.toAddress=]
    [LINE]:  [log.mail.client.toAddress=]
    [LINE]:  [log.mail.toAddress=]
    [LINE]:  [bill.report.toAddress=]
[FILE]: C:\Users\user\git\pom.xml
[FILE]: C:\Users\user\git\release.properties
    [LINE]:  [job.mail.toAddress=]
    [LINE]:  [log.mail.client.toAddress=]

予想される出力は次のようになります。

[FILE]: C:\Users\user\git\local.properties
    [LINE]:  [job.mail.toAddress=]
    [LINE]:  [log.mail.toAddress=]
    [LINE]:  [log.mail.client.toAddress=]
    [LINE]:  [log.mail.toAddress=]
    [LINE]:  [bill.report.toAddress=]
[FILE]: C:\Users\user\git\release.properties
    [LINE]:  [job.mail.toAddress=]
    [LINE]:  [log.mail.client.toAddress=]

ファイル名に関連する行がある場合にのみ、ファイル名を表示したい。私は sed の初心者であり、あなたが何をしているのかを完全に理解したいと思っています。

4

2 に答える 2

3

これはうまくいくかもしれません(GNU sed):

sed '$!N;/^\(\[FILE\]\).*\n\1/!P;D' file

[FILE]最後の行を残して複数の行を削除します。

于 2012-11-06T19:20:01.573 に答える
3

ここに別の変種があります:

sed '/LINE/{H;x;:r;n;/LINE/br;x;d};h;d'

常に最後の行を保持し、'LINE が表示されると、最後の行を表示し、'LINE を含む後続のすべての行を表示し、プロセスが再帰的に繰り返されます。

可能なすべての sed で動作します。

于 2012-11-06T19:53:41.090 に答える