Я использую следующую команду, чтобы найти шаблон, охватывающий несколько строк, и заменяю его пустой строкой:
sed -n '1h; 1!H; ${ g; s/<Pattern1>\n<pattern2> //g p }' <file-name>
Например, чтобы найти шаблон John Doe
в файле test.txt, который содержит следующие записи:
Mary
John
Doe
Simon
Henry
Я бы использовал команду:
sed -n '1h; 1!H; ${ g; s/John\nDoe //g p }' test.txt
Однако я не могу сделать этокоманда работает для шаблона, который имеет вторую строку как пустую, то есть использует символ ^ $.
Таким образом, если бы мне пришлось искать многострочный шаблон, Мэри, за которой следовала пустая строка, я делаюне вижу никаких подходящих шаблонов.Таким образом, следующая команда не вызывает поисков и, следовательно, не заменяет.
sed -n '1h; 1!H; ${ g; s/Mary\n^$ //g p }' test.txt
Есть мысли?
РЕДАКТИРОВАТЬ
Однако, если я сохраню несколько таких команд вфайл и выполнить их, затем первый поиск проходит нормально, однако при поиске последующих шаблонов я получаю пустой вывод из sed.
То есть, если я храню, sed -n '1h;! 1 H;$ {г;s / \ n // gp} 'sed -n' 1h;! 1 H;$ {г;s / \ n // gp} 'в файле, а затем выполните каждую строку в этом файле с помощью ключевого слова eval, затем первый sed заменяет первые многострочные шаблоны, т.е. pattern1, за которыми следует pattern2, однако он возвращаетпустой вывод, даже если файл содержит эти шаблоны.Любые подсказки?