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

Delete the line prior to the line containing the search pattern using linux command

我有一个包含单词和一些字符的 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" 之前的破折号 (-)。有很多破折号,我只想删除最后一个。

有什么想法吗?

我刚从

找到这个答案

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

它对我有用!

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

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

使用 N;...;P;D 方法在整个文件的长度内创建两行 window,如果 [=] 的最后一行不打印 window 的第一行17=] 包含 RegistryDataMigrator.