不定期补充一下在论坛看到的sed的实例:
例一:sed分域
http://bbs.chinaunix.net/forum/24/20041207/461745.html
1C2
1C3
1C31
1C32
1C4
2C3
2C4
1D1
1D10
1D12
1D2
1D3
1D31
1RC2
1RC20
1RC21
1RC3
1RC31
1WR1
1WR2
1WR20
1WR21
1WR23
...
排序后
[file2.txt]
1C2
1C3
1C4
1C31
1C32
2C3
2C4
1D1
1D2
1D3
1D10
1D12
1D31
1RC2
1RC3
1RC20
1RC21
1RC31
1WR1
1WR2
1WR20
1WR21
1WR23
...
规律:将每行分成三部分: “数字1” “字符串” “数字2”
第一、三字段按numberic顺序排序,中间部分按字母排序
第二个字段为主关键字,第三个字段为次关键字, 然后是第一个字段
$ cat file |sed 's/^\([0-9]*\)\([A-Z]*\)\([0-9]*\)/\1 \2 \3 /g' |sort +1 -2 +2n +0 -1
以空格划分域再排序
例二:处理日期
http://bbs.chinaunix.net/forum/24/20041207/462196.html
123456 345678 2005.05.06 123456
123456 234567 2003.5.6 234567
345555 987644 2003.4.23 543333
555555 999999 2004.11.5 999999
要将第四列数据变成正常的年月日,将2003.5.6 变成2003.05.0;
2003.4.23变成2003.04.23; 2004.11.5变成 2004.11.05
cat file | sed -e :a -e 's/-\([0-9]\)\([- ]\)/-0\1\2/;ta'
or
cat file | sed 's/-\([0-9]\)-/-0\1-/; s/-\([0-9]\) /-0\1 /'