sed行處理詳解(交換行,合併行,刪除行
將文本中的三行合併成一行
sed方法:sed 'N;N;s/\n/ /g' test 說明:N 追加下一個輸入行到模式空間,用了兩次把當前行的後兩行都追加到了模式空間,即多行模式空間。讓後用s將\n換行符替換成空格。最後的g是全局替換即替換所有的\n,若不加g表示只替換第一個。 awk方法:awk 'ORS=NR%3?" ":"\n"{print}' test1 NR當前行記錄數,ORS輸出記錄分隔符。'ORS=NR%3?" ":"\n" 爲三目運算,即若NR對3取莫爲0,ORS=“\n”,不爲0,ORS=“”。
多行合併一行:
cat xai 303728 303778 304175 304176 304261 304470 awk '{if(NR%2==0){printf $0 "\n"}else{printf "%s:",$0}}' xai 303728:303778 304175:304176 304261:304470
sed 'N;s/\n/ :/' xai 303728 :303778 304175 :304176 304261 :304470
合併上下兩行:
sed '$!N;s/\n/\t/' xai 303728 303778 304175 304176 304261 304470
合併匹配模式及其下一行:
sed '/304175/{N;s/\n/\t/}' xai 303728 303778 304175 304176 304261 304470
合併所有行:
sed ':a;N;s/\n/\t/;ba;' xai 303728 303778 304175 304176 304261 304470
2.交換行
2.1已知行號時交換兩行:
這裏是交換1,4行.當然你可以根據自己需要修改
cat xai 303728 303778 304175 304176 304261 304470
for(( i=1;i<=4;i++ )); do case $i in 1) sed -n 4p xai;; 4) sed -n 1p xai;; *) sed -n ${i}p xai;; esac; done 304176 303778 304175 303728
刪除空行
sed '/^$/d' test2
刪除多個空行爲一個空行
sed '/^$/{N;/^\n*$/D}' test