sed: сопоставить две строки

sed: сопоставить две строки

У меня есть текстовый файл, где записи разбиты на две строки. Я хотел бы разместить их на одной строке. Записи выглядят примерно так:

2013-07-29
 apt-get install git
2013-07-29
 apt-get install rsync
2013-07-31
 apt-get install nmap
2013-08-02
 apt-get install cifs-utils
2013-08-05
 apt-get install telnet

Я хотел бы получить следующее:

2013-07-29 apt-get install git
2013-07-29 apt-get install rsync
2013-07-31 apt-get install nmap
2013-08-02 apt-get install cifs-utils
2013-08-05 apt-get install telnet

Я пробовал с sed, но не могу сопоставить две строки. Есть ли какой-то трюк в sed, или есть какой-то лучший инструмент ?

решение1

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

или:

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

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

решение2

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

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

должно дать желаемый результат.

В качестве альтернативы вы также можете использовать paste:

paste -d' ' - - < inputfile

Связанный контент