RegEx для замены новых строк - PullRequest
1 голос
/ 21 мая 2019

Я пытаюсь заменить символы новой строки, где вторая строка не начинается с цифрового символа, я использовал это предложение:

perl -pe 's/\n/ / if m/\n[^0-9]/' *.txt

также я пробовал с этим:

sed -r 's/\n([^0-9])/\1/g' *.txt

Командная строка показывает мне только весь файл, но не вносит никаких изменений. Что я делаю?

Ответы [ 2 ]

2 голосов
/ 21 мая 2019

Учитывая этот входной файл:

$ cat file
1
2
foo
bar
3
etc
4
5

С любым awk:

$ awk '{printf "%s%s", (/^[0-9]/ ? ors: ""), $0; ors=ORS} END{print ""}' file
1
2foobar
3etc
4
5

С GNU sed для -z для чтения всего файла в виде одной строки, -E для включения ERE и принятия \n в качестве новой строки в регулярном выражении:

$ sed -Ez 's/\n([^0-9])/\1/g' file
1
2foobar
3etc
4
5

Обратите внимание, что решение awk, в дополнение к переносимой работе с любым awk в любой оболочке на любом компьютере UNIX, одновременно считывает / сохраняет только одну строку ввода и поэтому будет работать эффективно и надежно для произвольно больших файлов (в отличие от решение sed, которое считывает весь файл в память и, таким образом, YMMV для больших файлов).

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

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

sed ':a;N;s/\n\([^0-9]\)/\1/;ta;P;D' file

Откройте двухстрочное окно по всей длине файла и, если вторая строка окна не начинается с целого числа, удалите предыдущий символ новой строки и повторите.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...