regex - sed - 替换后跟 5 位数字的新行字符

标签 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

我想编写 sed 脚本来用空格替换换行符(后面没有跟 5 位数字)。

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

sed 's/\n\([0-9]{1,4}\)/ \1/g' 

在此样本上运行

11111 sss
22222 aaa
3333 aaa
333 sss
22 sss
1 sss

应该产生

11111 sss
22222 aaa 3333 aaa 333 sss 22 sss 1 sss

感谢所有能够提供帮助的人

最佳答案

或者使用 Perl One-Liner

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

解释

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

关于regex - sed - 替换后跟 5 位数字的新行字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25015943/

相关文章:

linux - 在文件中查找一行并在 bash 中的行末添加一些内容

c# - 用于捕获括号中数字的正则表达式

bash - 如何使用 cat 进行编程?

linux - sed:在两行中查找模式,而不是在该模式之后替换

parsing - awk 版本问题 - 将十六进制转换为十进制

bash - shell脚本中全局变量的作用域

c# - 停在正则表达式中的单词

python - 为什么这个字符串匹配正则表达式?

正则表达式差异 : (\w+)? 和 (\w*)

bash - 执行 bash 然后在 docker 中运行命令