題目背景,這個題也很有年頭了,看似簡單,實則坑很大,good luck! 先不要看答案 看看自己能寫出多少方法.
方法1 把每一行內容追加到Hold Space中,最后1行弄回到Pattern space中.然后進行替換
基礎版
[root@oldboyedu-show01 ~]# seq 10 |sed -n 'H;$x;s#\n# #gp'
1 2 3 4 5 6 7 8 9 10
[root@oldboyedu-show01 ~]# seq 10 |sed -n '1h;1!H;$x;s#\n# #gp'
1 2 3 4 5 6 7 8 9 10
[root@oldboyedu-show01 ~]# seq 10 |sed -n 'H;$x;s#\n# #gp'
1 2 3 4 5 6 7 8 9 10
[root@oldboyedu-show01 ~]# seq 10 |sed -n 'H;${x;s#\n# #gp}'
1 2 3 4 5 6 7 8 9 10
加強版: 上面的方法每一行開頭多個空格.
[root@oldboyedu-show01 ~]# seq 10 |sed -n '1h;1!H;$x;s#\n# #gp'
1 2 3 4 5 6 7 8 9 10
[root@oldboyedu-show01 ~]# seq 10 |sed -n '1h;1!H;${x;s#\n# #gp}'
1 2 3 4 5 6 7 8 9 10
備注:h,H,N的含義參考:
【進階】04-老男孩教育-sed命令模式空間及保持空間命令
https://www.jianshu.com/p/770b69cdbbb0
1.1.1.2 方法2 sed命令的“循環(標簽)”方法
[root@oldboyedu-show01 ~]# seq 10 |sed ':label ;N;s#\n# #g;t label'
1 2 3 4 5 6 7 8 9 10
1.1.1.3 方法3 tr
如果不用sed直接用tr即可
[root@oldboyedu-show01 ~]# seq 10 |tr "\n" " "
1 2 3 4 5 6 7 8 9 10
1.1.1.4 方法4 awk 修改ORS
ORS是Output Record Separator 輸出分隔符,用來指定awk在顯示每一行的時候每一行的結尾是什么默認是回車這里改成了空格。正好符合題意,把回車替換成空格.
[root@oldboyedu-show01 ~]# seq 10 |awk -vORS=" " '1'
1 2 3 4 5 6 7 8 9 10 [root@oldboyedu-show01 ~]#
[root@oldboyedu-show01 ~]# seq 10 |awk -vORS=" " '{print $0}'
1 2 3 4 5 6 7 8 9 10 [root@oldboyedu-show01 ~]#