Как получить sed для замены первого вхождения сложной строки, заканчивающейся многосимвольным разделителем? - PullRequest
1 голос
/ 30 июня 2019

У меня есть длинная строка текстовых и HTML-тегов.Я хочу использовать sed для замены символов между строкой значением ' MYSTART ' до первого вхождения </p> после начальной строки.Подстановочный текст: RESULTSAFTERSUBSTITUTIONWORKS

Я возился с неуклюжими регулярными выражениями и продолжаю бить по кирпичной стене.Я также попробовал несколько тестовых сайтов для регулярных выражений, но то, что они сообщают об успехе, не работает в sed для меня ни с использованием, ни с использованием '-r'.

cat myfile | sed -r 's/MYSTART.*?<\/p>/RESULTAFTERSUBSTITUTIONWORKS/'

Мой примерстрока выглядит примерно так:

THISSHOULDBEIGNORED_MYSTART<ac>blah</ac><another>lots of things 123 abc :</another></p><div><ac>another thing</another><p>welcome home to somewhere</p></div>the line keeps going and going</p><p>paragraph</p>

После подстановки она будет выглядеть так:

THISSHOULDBEIGNORED_RESULTAFTERSUBSTITUTIONWORKS<div><ac>another thing</another><p>welcome home to somewhere</p></div>the line keeps going and going</p><p>paragraph</p>

1 Ответ

1 голос
/ 30 июня 2019

С любым sed, который распознает \n как значение <newline>:

$ sed 's:</p>:\n:; s/MYSTART.*\n/RESULTAFTERSUBSTITUTIONWORKS/' file
THISSHOULDBEIGNORED_RESULTAFTERSUBSTITUTIONWORKS<div><ac>another thing</another><p>welcome home to somewhere</p></div>the line keeps going and going</p><p>paragraph</p>

Если у вас может быть </p> с перед вашей стартовой строкой, это будет больше похоже на это (не проверено):

sed 's:</p>:\n:g; s/MYSTART[^\n]*\n/RESULTAFTERSUBSTITUTIONWORKS/; s:\n:</p>:g'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...