2017-07-07 21 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