2012-02-16 2 views
3

У меня есть следующий вывод:Удалить символы новой строки/линии разрыва только для определенных линий

02:01:31 
OFFLINE 
02:02:31 
ONLINE 

, и я хотел бы, чтобы он стал:

02:01:31 OFFLINE 
02:02:31 ONLINE 

я нашел способ удаления всех новой строки/разрывы строк с sed ':a;N;$!ba;s/\n/ /g' однако это дает мне, что следует что на самом деле не то, что я после:

02:01:31 OFFLINE 02:02:31 ONLINE 

В: Как я могу удалить разрывы строк и строк только для строк, соответствующих определенному шаблону (в этом случае [0-9] будет достаточно?

PS: Это не должно быть с sed до тех пор, как я могу применить шаблон регулярных выражений для согласования линий

ответ

4

Сделайте свое s/\n/ /g быть s/\([0-9]\S*\)\n/\1 /g (цифра следует любое количество непробельных за которым следует новая строка).

+0

В '*' принадлежит внутри группы, а не снаружи: '([0-9] \ S *)' –

+0

Упс. Спасибо за опечатку. – Amber

+0

Работая, хотя мне приходилось избегать круглых скобок, чтобы сделать работу группировки: 's/\ ([0-9] \ S * \) \ n/\ 1/g' – Max

1

AWK Oneliner:

awk '/[0-9]$/{printf $0" ";next;}1' 

тест:

kent$ echo "02:01:31 
OFFLINE 
02:02:31 
ONLINE"|awk '/[0-9]$/{printf $0" ";next;}1' 
02:01:31 OFFLINE 
02:02:31 ONLINE 
Смежные вопросы