如果文件不控制M字符,我正在寻找加入行的方法。 AIX有标准的awk和sed实用程序,但没有GNU
问题:我们从第三方获取文件,来自Windows。并且该文件在每行的末尾具有^ M(即\ r)字符,期望某些行,其中某些字段中的数据本身具有\ n字符。因此需要加入具有这个额外\ n字符的行。
数据示例:
col1|col2|col3|col4|col5|^M
a1|a2|a3|a4|a5|^M
b1|b2|b3|b
4|b5|^M
c1|c2|c3|c4|c5|^M
预期产量。
col1|col2|col3|col4|col5|^M
a1|a2|a3|a4|a5|^M
b1|b2|b3|b4|b5|^M
c1|c2|c3|c4|c5|^M
提前感谢您的帮助。
答案 0 :(得分:2)
仅仅为了记录,perl正在处理\ n,\ r \ n等非常好的转换,没有非gnu sed的限制 - 实际上perl -pe
可以直接替换sed。
所以这个操作在BSD中运行良好:
$ echo -ne "abc\r\ndef\nijk\r\nlmn\r\n" |cat -vte
abc^M$
def$
ijk^M$
lmn^M$
$ echo -ne "abc\r\ndef\nijk\r\nlmn\r\n" |perl -pe "s/\r\n/\0/g;s/\n//g;s/\0/\r\n/g" |cat -vte
abc^M$
defijk^M$
lmn^M$
答案 1 :(得分:0)
可以通过键入^V
(Ctrl-V)然后键入" Return"来使用文字回车。键。
以下sed(1)
脚本循环遍历不在回车符中的行,删除不需要的换行符:
sed '
:label
/^M$/! {
N
s/\n//
blabel
}'
作为一行:
sed -e ':l' -e '/^M$/!{N;s/\n//;bl' -e '}'