我有一个带有一些(脏)数据库架构的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
感谢任何能够提供帮助的人
答案 0 :(得分:6)
perl -0777 -pe 's/\n(?!\d{5}\b)/ /g' yourfile
<强>解释强>
\n
与换行符匹配(?!\d{5}\b)
断言后面的内容不是五位数字和一个单词边界答案 1 :(得分:0)
使用awk
:
awk -v ORS= 'NR > 1 { printf /^[0-9]{5} / ? "\n" : " " } 1
END { if (NR) printf "\n" }' file
输出:
11111 sss
22222 aaa 3333 aaa 333 sss 22 sss 1 sss
答案 2 :(得分:0)
awk '{printf "%s%s" ,(NR>1&&$0~/^[0-9]{5} /?"\n":" "),$0}END{print ""}'
应该适用于您的示例:
kent$ echo "11111 sss
22222 aaa
3333 aaa
333 sss
22 sss
1 sss"|awk '{printf "%s%s" ,(NR>1&&$0~/^[0-9]{5} /?"\n":" "),$0}END{print ""}'
11111 sss
22222 aaa 3333 aaa 333 sss 22 sss 1 sss