замените новую строку пробелом, если следующая строка начинается с символа слова

У меня большой текстовый файл, который выглядит как

      some random : demo text for
illustration, can be long

and : some more

here is : another
one

Мне нужен результат вроде

      some random : demo text for illustration, can be long
and : some more
here is : another one

Я пробовал какое-то странное, явно ошибочное регулярное выражение, например %s/\w*\n/ /g но не могу осмыслить.

2 ответа

Решение

С вашими показанными образцами попробуйте следующее awkкод. Используя RS(разделитель записей), установив его обнулить. Это основано только на показанных вами образцах.

      awk -v RS="" '{$1=$1} 1' Input_file

Добавление другого решения на случай, если кто-то ищет работу с. Хотя 1-е решение, представленное здесь, должно использоваться ИМХО, в качестве альтернативы добавление этих решений тоже здесь.

2-е решение: добавление решения, чтобы проверить, начинаются ли строки с алфавитов, а затем добавлять их только с предыдущими строками или около того.

      awk '{printf("%s%s",$0~/^[a-zA-Z]/?(FNR>1 && prev~/^[a-zA-Z]/?OFS:""):ORS,$0);prev=$0} END{print ""}' Input_file

3-е решение: Примечание: это будет работать, только если в ваших строках присутствует двоеточие, как показано в примерах.

      awk '{printf("%s%s",$0~/:/?(FNR>1?ORS:""):OFS,$0)} END{print ""}'  Input_file

Объяснение: Использование printf функция awk. Затем, используя условия, если текущая строка имеет и больше 1, то напечатайте ORS, иначе ничего не напечатайте. Если строка не содержит : затем распечатайте OFSдля каждой строки. в END блок этой программы, печатающий новую строку.

Другие вопросы по тегам