Команда Linux для объединения нескольких строк в одну строку с помощью регулярного выражения - PullRequest
0 голосов
/ 23 мая 2019

У меня есть файл, в котором я хочу узнать дату (например, регулярное выражение) как первое вхождение строки и до следующей даты, мне нужно объединить эти строки в одну строку, которая будет между , используя команду Linux, а не какой-либо язык программирования.

Примечание: следующая дата, которая сработает, должна быть также первым появлением новой строки.

Короче говоря, мне нужно объединить несколько строк в одну строку с помощью шаблона регулярных выражений с помощью команды linux (например, sed, awk или любой другой).

Я пытался использовать команды linux для sed и awk, но безуспешно. Любая другая команда linux тоже подойдет.

например.

date1 Hey.. This is Joe 
Fernandis.
date2 I live in Panjim, 
Goa date3 
what about you? 
date4 have a great day ahead 

вывод должен быть:

date1 Hey.. This is Joe Fernandis. 
date2 I live in Panjim, Goa date3 what about you? 
date4 have a great day ahead 

Ответы [ 2 ]

1 голос
/ 24 мая 2019
$ awk '{printf "%s%s", (/^date/ ? ors : OFS), $0; ors=ORS} END{print ""}' file
date1 Hey.. This is Joe  Fernandis.
date2 I live in Panjim,  Goa date3  what about you?
date4 have a great day ahead

Вам нужно будет определить фактическое регулярное выражение для любого формата даты самостоятельно, поскольку вы не сказали нам, что это такое, или не показали его в своем примере.

0 голосов
/ 25 мая 2019

Это может работать для вас (GNU sed):

sed '/^date/{:a;N;/\ndate/!s/\n//;ta;P;D}' file

Если строка начинается с даты, добавьте следующую строку, а если эта строка не начинается с даты, удалите новую строку междудве строки и повтор.В противном случае напечатайте / удалите первую строку и повторите.

Если первая строка файла всегда будет датой, используйте:

sed ':a;N;/\ndate/!s/\n//;ta;P;D' file
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...