sed: соответствуйте двум строкам

Если у Вас есть GNU sed (таким образом, не встроил Linux или Cygwin):

sed '/bar/,+1 d'

Если Вы имеете bar на двух последовательных строках это удалит вторую строку, не анализируя его. Например, если у Вас есть файл с 3 строками bar/bar/foo, foo строка останется.

9
08.10.2013, 02:39
2 ответа
sed 'N;s/\n/ /'
  • N соединяет затем входную строку с пространством шаблона
  • s/\n/ / заменяет новую строку, которая разделяет строки с пространством.

или:

sed -n 'N;s/\n/ /;/regex/p'
  • -n отключает автоматическую печать пространства шаблона как последняя команда
  • /regex/p строки печати, соответствующие regex

Используйте g модификатор для замен в случае, если Вы присоединяетесь больше чем к двум строкам, например. N;N;N;s/\n/ /g.

12
27.01.2020, 20:05
  • 1
    Спасибо за большое объяснение вместо просто copypasta. –  g33kz0r 15.12.2016, 19:53

Кажется что apt-get строки имеют предыдущий пробел. Высказывание:

sed -e :a -e '$!N;s/\n / /;ta' -e 'P;D' inputfile

должен привести к желаемому результату.

С другой стороны, можно также использовать paste:

paste -d' ' - - < inputfile
6
27.01.2020, 20:05

Теги

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