cat filemary,0,3,5459,HS
boby,0,4,,
lily,0,7,,
jamy,0,8,,
jack,0,9,5460,BN
ston,0,10,,
mark,0,11,,
要得到这样的结果:
mary,0,3,5459,HS
boby,0,4,5459,HS
lily,0,7,5459,HS
jamy,0,8,5459,HS
jack,0,9,5460,BN
ston,0,10,5460,BN
mark,0,11,5460,BN
- sed '/,$/!{p;s/.*,\([^,]*,[^,]*\)$/\1/;h;d};G;s/,\n//' file
[解析] 把有内容的行打印后,替换掉多余的内容,只保留之后两个字段的内容,然后 h 拷贝入 hold space 里,再 d 删除 pattern space 里的内容,并跳过了后面的代码,当匹配到 , 符号结尾的行,则直接执行后面 G,追加到后面,替换到末尾的逗号和换行。
- sed -r 'N;s/((,[^,\n]*){2})(\n.*),,/\1\3\1/;P;D' file
[解析] 这个思路也是沿用经典的 P;D 模式,N读取下一行,然后替换,打印第一行,删除第一行。
阅读(597) | 评论(0) | 转发(0) |