我有一个文件(test.dat),其中包含这样的数据
459|199811047|a |b |shan
kar|ooty|
460|199811047|a |b |guru|cbe|
但我需要它:
459|199811047|a |b |shankar|ooty|
460|199811047|a |b |guru|cbe|
在读取此文件中的数据时,我不想从每条记录的末尾删除换行符。我只想删除管道符号中两个字符串( like:shankar )之间的\ n。
实际上在unix我的dat文件中...由500个字符组成..所以前300个字符出现在第一行并且为下一个200字符得到了中断(换行符)...但是500应该被视为单行..所以我试图追加由于换行符而中断的字符。
答案 0 :(得分:1)
目前尚不清楚加入两条线的标准是什么。但是,这可能会对显示的数据起作用:
sed -e '/|shan$/N;s/|shan\nkar|/|shankar|/' test.dat
在MacOS X 10.6.6上使用sed
进行测试。
如果标准为'如果该行不以管道结束,请将其与下一行连接',然后这样做:
sed -e '/[^|]$/{N;s/\n//;}' test.dat
搜索说“如果线路没有以管道结束”; '{'开始一组行动; N连接下一行,中间用换行符; s/\n//
删除换行符; '}'结束了这组操作。
答案 1 :(得分:1)
受How can I replace a newline (\n) using sed?启发
sed ':a;N;/|$/!ba;s/\n//g'
解释(与灵感的区别):
/|$/!ba
答案 2 :(得分:0)
awk 'ORS=/^[0-9]/?"\0":"\n"' file
ruby -ne 'print /^\d+/?"#{$_.chomp}":"#{$_}";' file
答案 3 :(得分:0)
略有不同的方法:
sed '/^.\{300\}$/{N;s/\n//}' inputfile
如果一行包含正好300个字符,请附加下一行。