Я пытаюсь извлечь некоторую информацию из файла журнала, и мне нужно удалить из нее разрывы строк, чтобы легко ее обработать, вот пример необходимого результата:
входной файл:
02/01/2018 08:18:14 ANR0407I Session 63121 started for administrator
ADMIN_CENTER (DSMAPI) (Tcp/Ip SAP-DOC(52499)).SESSION:
63121)
Вывод должен быть:
02/01/2018 08:18:14 ANR0407I Session 63121 started for administrator ADMIN_CENTER (DSMAPI) (Tcp/Ip SAP-DOC(52499(SESSION: 63121)
Вы можете использовать sed
, чтобы соединить строки с предыдущей, если они начинаются с последовательности пустых символов (пробел или горизонтальная табуляция):
sed -e :a -e '$!N;s/\n[[:blank:]]\{1,\}/ /;ta' -e 'P;D' file.log
Это небольшая вариация примера [ 1110] 40. Добавьте строку к предыдущему, если она начинается со знака равенства "=" из Объясненных однострочников Sed, Часть I: Интервал между файлами, нумерация и преобразование и замена текста
Если «блоки» разделены одной или несколькими пустыми строками (в журнале недостаточно информации, чтобы узнать, так ли это), то более простой альтернативой было бы использование awk
в абзаце mode :
awk -vRS= '{$1=$1} 1' file.log
, который читает целые абзацы и затем переформатирует их с разделителем вывода по умолчанию (один пробел).