0

我有一个定义明确的问题,似乎是 sed 的一个很好的候选者。

我的输入文件包含两个标记之一:

[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 回答