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
转载于:https://blog.51cto.com/3258715/1747196