2017-07-07 23 views
1

是否可以在bash中使用sed中的某些字符串切換行的位置?bash中的開關線位置

例如:

我有這兩者都是輸出作爲bash命令到一個文本文件的部分的線

2. diskusage1: 27.0572519084 
3. partition1: 

有沒有辦法顛倒這些線的順序?爲了讓他們交換位置,看起來像:

3. partition1: 
2. diskusage1: 27.0572519084 

感謝

+0

是,管無論是產生輸出到'tac'(這是'反向cat')的輸出例如'some_command | tac'。如果你需要把它寫入文件的後面,那麼'some_command | tac> file.txt'示例:'printf「2. diskusage1:27.0572519084 \ n3。partition1:\ n」| tac' –

+0

如果你必須使用'sed',那麼'some_command | sed -n'1!g; h; $ p'' –

+0

爲了交換任意行,請看[這個問題](https://stackoverflow.com/questions/4331851/swapping-two-lines) –

回答

2

從註釋中繼續,是的,你可以很容易地使用反向輸出的線或者taccat以相反的順序)或sed。在這兩種情況下,只需將所運行的任何命令的輸出傳送至tacsed即可。如果你需要寫顛倒內容到一個文件,然後簡單地添加一個重定向到結束(如> file.txt

使用tac這簡直就是

some_command | tac > file.txt 

使用sed這將是:

some_command | sed -n '1!G;h;$p' > file.txt 

您的輸出:

$ printf "2. diskusage1: 27.0572519084\n3. partition1:\n" 
2. diskusage1: 27.0572519084 
3. partition1: 

反向輸出

$ printf "2. diskusage1: 27.0572519084\n3. partition1:\n" | tac 
3. partition1: 
2. diskusage1: 27.0572519084 

$ printf "2. diskusage1: 27.0572519084\n3. partition1:\n" | sed -n '1!G;h;$p' 
3. partition1: 
2. diskusage1: 27.0572519084 

給他們一個嘗試,讓我知道,如果您還有其他問題。

+0

看起來第二和第三不僅是線條。 – hedgar2017

+0

是的,同意了,好點,但我只能繼續討論問題。如果是1-50,那麼我們需要創造性地使用一個計數器,''read''或'readarray'使用'tac'或一個排除範圍使用'sed'或者'head'和'tail'結合使用' :)'。 –

0

這將做:

command | sed '2{h;d};3{p;x}' > file.txt