【shell】sed處理多行合並


有這么一個題

文件格式

table=t1
name
owner
address
table=t2
id
text
col1
comment
col5
table=t3
prod_name
price

要求按table=關鍵字,將相同的table的列放在同一行,結果為:

table=t1 name owner address
table=t2 id text col1 comment col5
table=t3 prod_name price

另外要求只能用sed

 

這題我的的想法是先用xargs去掉所有的換行符,然后用sed把table替換成\ntable。

可以題目中要求了只能用sed,所以本題的核心就是sed合並行。

怎么用sed合並行,我用到了保持空間,步驟如下:

1.如果是第一行,把模式空間替換到保持空間;

2.如果不是第一行,把模式空間追加到保持空間;

3.如果是最后一行,把保持空間的內容替換到模式空間;

4.通過-n,只輸出模式空間最后一行的內容;

通過這四步,最后一行就變成了  table=t1 name owner address \n table=t2 id text col1 comment col5 \n table=t3 prod_name price,去掉\n 就完成了行的合並。

參考代碼如下:

 

[root]$ cat sedMerge.txt
table=t1
name
owner
address
table=t2
id
text
col1
comment
col5
table=t3
prod_name
price
[root]$ cat sedMerge.txt | sed  -n '1h;1!H;$g;s/\n/ /g;s/table/\ntable/g;$p' | sed '/^$/d'
table=t1 name owner address
table=t2 id text col1 comment col5
table=t3 prod_name price

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM