在SED中有条件的分支

  • 本文关键字:分支 有条件 SED sed
  • 更新时间 :
  • 英文 :


我有一个明确定义的问题,似乎是SED的好候选人。

我的输入文件包含两个令牌之一:

[FILE][LINE]

结构看起来像这样:

[FILE]: C:Usersusergitbuild.xml
[FILE]: C:Usersusergitdataload-pom.xml
[FILE]: C:Usersusergitlocal.properties
    [LINE]:  [job.mail.toAddress=]
    [LINE]:  [log.mail.toAddress=]
    [LINE]:  [log.mail.client.toAddress=]
    [LINE]:  [log.mail.toAddress=]
    [LINE]:  [bill.report.toAddress=]
[FILE]: C:Usersusergitpom.xml
[FILE]: C:Usersusergitrelease.properties
    [LINE]:  [job.mail.toAddress=]
    [LINE]:  [log.mail.client.toAddress=]

预期的输出将是:

[FILE]: C:Usersusergitlocal.properties
    [LINE]:  [job.mail.toAddress=]
    [LINE]:  [log.mail.toAddress=]
    [LINE]:  [log.mail.client.toAddress=]
    [LINE]:  [log.mail.toAddress=]
    [LINE]:  [bill.report.toAddress=]
[FILE]: C:Usersusergitrelease.properties
    [LINE]:  [job.mail.toAddress=]
    [LINE]:  [log.mail.client.toAddress=]

我只想查看文件名与它们相关联时。我正在崭新的SED品牌,并希望完全了解您的工作。

这是另一个变体:

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

它一直保持最后一行,当它看到"行"时,它显示了最后一行,然后显示所有包含'行的所有以下行,并且该过程如此递归地重复。

它可以与任何可能的SED一起使用。

这可能对您有用(gnu sed):

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

删除多个[FILE]线保留了最后一个。

最新更新