замените новую строку пробелом, если следующая строка начинается с символа слова
У меня большой текстовый файл, который выглядит как
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
блок этой программы, печатающий новую строку.