2.交换行 2.1已知行号时交换两行 zj@zj:~/Script/blog_script$ cat test baidu music so terrible so bad microsoft haha haha yahoo byebye google princess so good 这里是交换1,4行.当然你可以根据自己需要修改 zj@zj:~/Script/blog_script$ for(( i=1;i<=4;i++ )); do case $i in 1) sed -n 4p test;; 4) sed -n 1p test;; *) sed -n ${i}p test;; esac; done google princess so good microsoft haha haha yahoo byebye baidu music so terrible so bad 连续时好说: zj@zj:~/Script/blog_script$ sed '1{h;d};2{G}' test microsoft haha haha baidu music so terrible so bad yahoo byebye google princess so good
2.2不知道行号 要交换的两行是连续行的情况下: zj@zj:~/Script/blog_script$ sed '/baidu/{h;d};/microsoft/{G}' test microsoft haha haha baidu music so terrible so bad yahoo byebye google princess so good ps:交换包含bai与microsoft的行 两行不连续的情况:
zj@zj:~/Script/blog_script$ sed '/baidu/{:a;N;/google/!ba;s/\([^\n]*\)\n\(.*\)\n\(.*\)/\3\n\2\n\1/}' test google princess so good microsoft haha haha yahoo byebye baidu music so terrible so bad ps:交换含有baidu与google的行
研究了下写了个不论连续不连续的都可以的: zj@zj:~/Script/blog_script$ sed '/baidu/{:a;N;/microsoft/!ba;/[^\n]*baidu[^\n]*\n[^\n]*microsoft[^\n]*$/{s/\([^\n]*baidu[^\n]*\)\n\(.*\)/\2\n\1/};s/\([^\n]*\)\n\(.*\)\n\(.*\)/\3\n\2\n\1/}' test microsoft haha haha baidu music so terrible so bad yahoo byebye google princess so good
zj@zj:~/Script/blog_script$ sed '/baidu/{:a;N;/google/!ba;/[^\n]*baidu[^\n]*\n[^\n]*google[^\n]*$/{s/\([^\n]*baidu[^\n]*\)\n\(.*\)/\2\n\1/;};s/\([^\n]*\)\n\(.*\)\n\(.*\)/\3\n\2\n\1/}' test google princess so good microsoft haha haha yahoo byebye baidu music so terrible so bad
3.交互奇偶行 zj@zj:~/Script/blog_script$ sed '$!N;s/\([^\n]*\)\n\([^\n]*\)/\2\n\1/' test microsoft haha haha baidu music so terrible so bad google princess so good yahoo byebye
4.删除行就不用说了吧 d喽....
5.删除空行 sed '/^$/d' test2 删除多个空行为一个空行 sed '/^$/{N;/^\n*$/D}' test2