sed - 替换后面跟不是5位数的换行符

AlS*_*her 3 regex bash sed

我有一个带有一些(脏)数据库架构的csv文件.

例:

10391,0,3,4,12,44 --ok
10391,0,3,4,      --not ok
12,44             --not ok
10391,0,3,4,12,44 --ok
Run Code Online (Sandbox Code Playgroud)

我想写sed脚本来替换带有空格的新行字符(后面跟不是5位数字).

写了这个,但对我来说不正常:

sed 's/\n\([0-9]{1,4}\)/ \1/g' 
Run Code Online (Sandbox Code Playgroud)

在这个样本上运行

11111 sss
22222 aaa
3333 aaa
333 sss
22 sss
1 sss
Run Code Online (Sandbox Code Playgroud)

应该产生

11111 sss
22222 aaa 3333 aaa 333 sss 22 sss 1 sss
Run Code Online (Sandbox Code Playgroud)

感谢任何能够提供帮助的人

zx8*_*x81 6

或者使用Perl One-Liner

perl -0777 -pe 's/\n(?!\d{5}\b)/ /g' yourfile
Run Code Online (Sandbox Code Playgroud)

说明

  • \n 匹配换行符
  • (?!\d{5}\b) 断言后面的内容不是五位数字和一个单词边界
  • 我们插入一个空格