sed正则经典案例(二)   

###修改登记信息格式

已知文本内容如下:

[root@oldboyedu36 oldboy]# cat 2.txt 
张三--1995/04/12--186-1233-4324--5004132131231231231
李四--1993/05/20--175-4323-2343--4423432423413132133
王五--1989/12/21--150-3123-3123--4324234121231231242

请替换成如下结果:

张三
19950412
18612334324
5004132131231231231
李四
19930520
17543232343
4423432423413132133
王五
19891221
15031233123
4324234121231231242

解答:
sed+替换

sed -nr '1,3s#--#\n#g;s#[/-]##gp' 2.txt  ===[]或
sed -r 's#-{2}#\n#g;s#[/-]##g' 2.txt
sed -nr '1,3s#-{2}#\n#g;s#[/-]##gp' 2.txt  ===[]或
sed -nr '1,3s#--#\n#g;s#/|-##gp' 2.txt   ==='|'或
sed -re 's#--#\n#g' -e '1,3s#/|-##g' 2.txt ===‘|’或
sed -r 's#-{2}# #g;s#/|-##g' 2.txt|xargs -n1  不用换成空,直接换成换行符‘\n’

sed+反向引用

sed -r 's#(.*)--(.*)/(.*)/(.*)--(.*)-(.*)-(.*)--(.*)#\1\n\2\3\4\n\5\6\7\n\8#' lianxi.txt
awk切割输出+sed替换
awk -F"[-]+" '{print $1"\n" $2"\n" $3 $4 $5"\n" $6}' 2.txt|sed 's#/##g'
awk -F"[-/]+" '{print $1"\n" $2$3$4 "\n" $5$6$7"\n" $8}' 2.txt
awk -F "[-/]+" '{print $1,$2$3$4,$5$6$7,$8}' 2.txt|xargs -n1
awk -F"--" '{for(i=1;i<=NF;i++){gsub(/\/|-/,"",$i);print $i}}' 2.txt ===gsub替换函数