我有一个明确定义的问题,似乎是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]
线保留了最后一个。