- 论坛徽章:
- 0
|
原帖由 springwind426 于 2008-9-18 18:54 发表
sed '/music/{:a;N;/reallist/!ba;s/\([^\n]*\)\n\(.*\)\n\(.*\)/\3\n\2\n\1/}' 数据文件
解释:
/music/{....} 遇到含有music的行,开始做{}中的命令序列
:a;N;/reallist/!ba 循环读信息,直到读取 ...
springwind兄没有考虑music,和reallist两行是连续的情况
sed '/music/{:a;N;/reallist/!ba;/[^\n]*music[^\n]*\n[^\n]*reallist[^\n]*$/{s/\([^\n]*music[^\n]*\)\n\(.*\)/\2\n\1/}};s/\([^\n]*\)\n\(.*\)\n\(.*\)/\3\n\2\n\1/' test1
当然在先知道是连续的情况下,sed '/Nick/{h;d};/Dale/{G}' test1也是可以的
zj@zj:~/Script/cushell/08.09.19$ cat test1
29/05 b/p 5:35 Nick
29/05 L/c 1:00:00 Dale
01/06 L/c 30:50 Jick
zj@zj:~/Script/cushell/08.09.19$ sed '/Nick/{:a;N;/Jick/!ba;/[^\n]*Nick[^\n]*\n[^\n]*Jick[^\n]*$/{s/\([^\n]*Nick[^\n]*\)\n\(.*\)/\2\n\1/}};s/\([^\n]*\)\n\(.*\)\n\(.*\)/\3\n\2\n\1/' test1
01/06 L/c 30:50 Jick
29/05 L/c 1:00:00 Dale
29/05 b/p 5:35 Nick
zj@zj:~/Script/cushell/08.09.19$ sed '/Nick/{:a;N;/Dale/!ba;/[^\n]*Nick[^\n]*\n[^\n]*Dale[^\n]*$/{s/\([^\n]*Nick[^\n]*\)\n\(.*\)/\2\n\1/}};s/\([^\n]*\)\n\(.*\)\n\(.*\)/\3\n\2\n\1/' test1
29/05 L/c 1:00:00 Dale
29/05 b/p 5:35 Nick
01/06 L/c 30:50 Jick
zj@zj:~/Script/cushell/08.09.19$ sed '/Nick/{h;d};/Dale/{G}' test1
29/05 L/c 1:00:00 Dale
29/05 b/p 5:35 Nick
01/06 L/c 30:50 Jick |
|