Поиск текста в строке и замена текста в следующей строке - PullRequest
0 голосов
/ 29 ноября 2018

У меня есть файл, в котором есть текст, подобный приведенному ниже:

#my-var="Group Name",*ItemInGroup
ThisIsTheResult/aaa/bbb/1
#my-var="Group Name",ItemInGroup
ThisIsTheResult/aaa/bbb/2
#my-var="Group Name",ItemInGroup2
ThisIsTheResult/aaa/bbb/3
#my-var="Another Group Name",*AnotherItemInGroup
ThisIsTheResult/aaa/bbb/4
#my-var="Another Group Name",AnotherItemInGroup
ThisIsTheResult/aaa/bbb/5

Однако я хотел бы выполнить поиск в документе, и если он найдет my-var="+++++++++++",* (где +++++++++++ может бытьчто угодно), затем он переходит к следующей строке и заменяет aaa/bbb на yyy/zzz.Ожидаемый результат, как показано ниже:

#my-var="Group Name",*ItemInGroup
ThisIsTheResult/yyy/zzz/1
#my-var="Group Name",ItemInGroup
ThisIsTheResult/aaa/bbb/2
#my-var="Group Name",ItemInGroup2
ThisIsTheResult/aaa/bbb/3
#my-var="Another Group Name",*AnotherItemInGroup
ThisIsTheResult/yyy/zzz/4
#my-var="Another Group Name",AnotherItemInGroup
ThisIsTheResult/aaa/bbb/5

Я пытался сделать это в сценарии оболочки, но мой опыт регулярных выражений и sed / awk не достаточно хорош ... Так что, надеюсь, кто-то знает ответ легко:)

Приветствия

Дэвид

1 Ответ

0 голосов
/ 29 ноября 2018

С GNU sed:

sed '/my-var=".*",\*/{n;s|aaa/bbb|yyy/zzz|}' file

Если строка соответствует регулярному выражению my-var=".*",\*, прочитайте следующую строку (n) и найдите (s|||) для aaa/bbb и замените на yyy/zzz.

Вывод:

#my-var="Group Name",*ItemInGroup
ThisIsTheResult/yyy/zzz/1
#my-var="Group Name",ItemInGroup
ThisIsTheResult/aaa/bbb/2
#my-var="Group Name",ItemInGroup2
ThisIsTheResult/aaa/bbb/3
#my-var="Another Group Name",*AnotherItemInGroup
ThisIsTheResult/yyy/zzz/4
#my-var="Another Group Name",AnotherItemInGroup
ThisIsTheResult/aaa/bbb/5

Пожалуйста, ознакомьтесь с man sed и FAQ по регулярным выражениям переполнения стека .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...