Regex 用于替换新行的正则表达式

Regex 用于替换新行的正则表达式,regex,linux,bash,awk,sed,Regex,Linux,Bash,Awk,Sed,我试图替换第二行不以数字字符开头的换行符,我使用了以下句子: perl -pe 's/\n/ / if m/\n[^0-9]/' *.txt 我也试过这样做: sed -r 's/\n([^0-9])/\1/g' *.txt 命令提示符仅显示整个文件,但不进行任何更改,我正在做什么?给定此输入文件: $ cat file 1 2 foo bar 3 etc 4 5 对于任何awk: $ awk '{printf "%s%s", (/^[0-9]/ ? ors: ""), $0; ors=O

我试图替换第二行不以数字字符开头的换行符,我使用了以下句子:

perl -pe 's/\n/ / if m/\n[^0-9]/' *.txt
我也试过这样做:

sed -r 's/\n([^0-9])/\1/g' *.txt
命令提示符仅显示整个文件,但不进行任何更改,我正在做什么?

给定此输入文件:

$ 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将
-z
作为一个字符串读取整个文件,使用
-E
启用ERE,并将
\n
作为regexp中的换行符:

$ sed -Ez 's/\n([^0-9])/\1/g' file
1
2foobar
3etc
4
5
请注意,awk解决方案除了在任何UNIX设备上的任何shell中可移植地使用任何awk外,一次只读取/存储一条输入行,因此对于任意大的文件,它将高效而稳定地工作(与sed解决方案相反,sed解决方案将整个文件读取到内存中,而YMMV用于大文件).

这可能适合您(GNU-sed):


在整个文件长度中打开一个两行窗口,如果窗口的第二行不是以整数开头,请删除前面的换行符并重复。

是否可以添加有问题的预期输出的示例输入输出。Sed按行分隔输入,因此,默认情况下,模式空间从不包含换行符本身。请参阅。
sed ':a;N;s/\n\([^0-9]\)/\1/;ta;P;D' file