使用sed将来自现场的中间除去新行字符
问题描述:
我有数据看起来像这样使用sed将来自现场的中间除去新行字符
a,b,c,d
a,b1
b2,c,d
A,B,C,D
正在发生的事情是,在2场有偶尔在第二场换行符太行被分散在两行
到目前为止,我还发现了一个sed脚本,将做到这一点倒像是
cat file| sed ':a;N;$!ba;s/\(\(b1\)\)\n/\1/g'
,但我努力获得的正确组合(*。 ,)使这项工作,所以我已经取代它与b1得到这个例子的工作,但在现实世界A,B,C和D是混合长度和内容领域
我期待的最终结果对于本
a,b,c,d
a,b1b2,c,d
A.B,C,D
任何帮助深表感谢
感谢 马特
答
我这里有一个解决方案,还没有完美的 - 但我会再考虑一下。如果您的sed
版本支持扩展正则表达式,你可以这样做:
cat file | sed -r ':a;N;$!ba;s/((^|\n)([^,]+,){0,2}[^,]+)\n/\1/g'
如果有前三列的一个换行符,将工作。到目前为止,它还没有在一个“行”中使用多个换行符。
说明:!(^|\n)
的行的开头(RESP换行符)[^,]+,
意味着匹配:至少一个(+
意味着一个或多个)字符= “” 接着是”, “([^,]+,){0,2}
如果存在用”,“分隔的0-2列,则匹配 [^,]+
表示在0-2列之后有一些(至少一个)字符!=”,“。
尾随\n
匹配换行符
概括了s
命令将匹配包含与在端部具有换行符0-3列中的所有行,并且将自身(\1
)代替它不包括尾部换行符。
答
在awk中
awk -F, 'NF < 4 {getline nextline; $0 = $0 nextline} 1' filename
是AWK好吗?对我来说更像awk。 – MJB 2011-05-05 14:59:32