使用linux命令删除包含搜索模式的行之前的行

时间:2019-01-07 09:13:09

标签: shell sed text-parsing

我有一个带单词和一些字符的yaml文件。 version: "5.0.0" migratorConfigs: - name: "SchemaMigrator" order: 1 parameters: location: "step1" schema: "identity" - version: "5.1.0" migratorConfigs: - name: "IdentityDataCleaner" order: 1 parameters: schema: "identity" - name: "SchemaMigrator" order: 2 parameters: location: "step1" schema: "identity" - name: "RegistryDataMigrator" order: 6 parameters: schema: "um"

我只需要删除name: "RegistryDataMigrator"之前的破折号(-)。有很多破折号,我只想删除最后一个。

有什么想法吗?

2 个答案:

答案 0 :(得分:3)

我刚刚从

找到了这个答案

http://www.theunixschool.com/2012/06/sed-25-examples-to-delete-line-or.html

sed -i -n '/RegistryDataMigrator/{x;d;};1h;1!{x;p;};${x;p;}' /home/user1/Documents/migration.yaml

对我有用!

答案 1 :(得分:2)

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

sed 'N;/RegistryDataMigrator[^\n]*$/!P;D' file

使用N;...;P;D方法在文件的整个长度上创建两行窗口,并且如果窗口的最后一行包含RegistryDataMigrator,则不打印窗口的第一行。