Удалить строку, только если предыдущая строка имеет тег - sed ? или проще?

Проблема решена. Это все из-за моего фреймворка. Мне нужно было разрешить ssl-соединения. Спасибо всем за помощь)

0
31.07.2019, 09:36
2 ответа
gsed '/<\/ac:image>/,+1 { /<\/a>$/d; }' testfile.txt

где gsedозначает GNU sed.

-1
28.04.2021, 23:30

Если это всегда одна и та же последовательность без сюрпризов, вам не нужен синтаксический анализ XML, и вы действительно можете использовать sed.

Чтобы всегда проверять пару двух линий, используйте шаблон N;P;Dв sed:

.
sed 'N;P;\_</ac:image>\n *</a>$_d;D' filename

Как это работает?

  • Nдобавляет следующую строку. Обычно вы делаете $!N, чтобы проверить, есть ли вообще следующая строка, но в вашем случае это не проблема. :Если следующей строки нет, ничего особенного не происходит.
  • Теперь, когда в вашем буфере две строки, Pпечатает первую строку
  • \_</ac:image>\n *</a>$_ddудаляет пространство шаблона, если вы найдете заданный шаблон из двух строк (\n— это новая строка между строками ). Первая строка уже была напечатана, поэтому при удалении пространства шаблона удаляется только вторая строка пары
  • .
  • Последний оператор выполняется только в том случае, если шаблон не совпал. Dудаляет первую строку (и новую строку )и перезапускает цикл со второй строкой пары,поэтому проверяется каждая пара строк
1
28.04.2021, 23:30

Теги

Похожие вопросы