Удалите строку, предшествующую строке, содержащей шаблон поиска, с помощью команды linux. - PullRequest
0 голосов
/ 07 января 2019

У меня есть файл 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 голосов
/ 07 января 2019

Это может сработать для вас (GNU sed):

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

Создайте двухстрочное окно по всей длине файла, используя метод N;...;P;D, и не печатайте первую строку окна, если последняя строка окна содержит RegistryDataMigrator.

0 голосов
/ 07 января 2019

Я только что нашел ответ от

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

И у меня это работает!

...