bash команда для удаления новых строк, если выполняется условие на следующей строке - PullRequest
0 голосов
/ 04 марта 2020

У меня есть следующий файл

cat file.txt

Alex
Josh
c.ab23
Shawn
c.a13
c.oq42
Allie
c.ba212

Я хотел бы заменить новые строки на вкладку, только если следующая строка начинается с c. следующим образом:

Alex
Josh    c.ab23
Shawn   c.a13   c.oq42
Allie   c.ba212

Я думал что-то похожее на

perl -pe 's/\nc\./\t/g'

Хотя я думаю perl читает построчно. Есть ли еще одна простая команда, которая сделает это?

Ответы [ 2 ]

3 голосов
/ 04 марта 2020

Ваша команда perl может работать сразу со всем текстом с помощью переключателя -0777 :

perl -0777 -pe 's/\n(?=c\.)/\t/g' file.txt

(и на месте, если вы добавите -и переключатель )

1 голос
/ 04 марта 2020
awk '/^c\./ {P=P"\t"$0; next} {if (P) print P; P=$0} END {if (P) print P}' < file.txt

Выходы

Alex
Josh    c.ab23
Shawn   c.a13   c.oq42
Allie   c.ba212
...