是否可以在bash中使用sed中的某些字符串切换行的位置?bash中的开关线位置
例如:
我有这两者都是输出作为bash命令到一个文本文件的部分的线
2. diskusage1: 27.0572519084
3. partition1:
。
有没有办法颠倒这些线的顺序?为了让他们交换位置,看起来像:
3. partition1:
2. diskusage1: 27.0572519084
感谢
是否可以在bash中使用sed中的某些字符串切换行的位置?bash中的开关线位置
例如:
我有这两者都是输出作为bash命令到一个文本文件的部分的线
2. diskusage1: 27.0572519084
3. partition1:
。
有没有办法颠倒这些线的顺序?为了让他们交换位置,看起来像:
3. partition1:
2. diskusage1: 27.0572519084
感谢
从注释中继续,是的,你可以很容易地使用反向输出的线或者tac
(cat
以相反的顺序)或sed
。在这两种情况下,只需将所运行的任何命令的输出传送至tac
或sed
即可。如果你需要写颠倒内容到一个文件,然后简单地添加一个重定向到结束(如> 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
给他们一个尝试,让我知道,如果您还有其他问题。
看起来第二和第三不仅是线条。 – hedgar2017
是的,同意了,好点,但我只能继续讨论问题。如果是1-50,那么我们需要创造性地使用一个计数器,''read''或'readarray'使用'tac'或一个排除范围使用'sed'或者'head'和'tail'结合使用' :)'。 –
这将做:
command | sed '2{h;d};3{p;x}' > file.txt
是,管无论是产生输出到'tac'(这是'反向cat')的输出例如'some_command | tac'。如果你需要把它写入文件的后面,那么'some_command | tac> file.txt'示例:'printf“2. diskusage1:27.0572519084 \ n3。partition1:\ n”| tac' –
如果你必须使用'sed',那么'some_command | sed -n'1!g; h; $ p'' –
为了交换任意行,请看[这个问题](https://stackoverflow.com/questions/4331851/swapping-two-lines) –