У меня есть текстовый файл, где записи разбиты на две строки. Я хотел бы разместить их на одной строке. Записи выглядят примерно так:
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