【问题标题】:Switch line placements in bash在 bash 中切换行位置
【发布时间】:2017-12-12 05:14:15
【问题描述】:

是否可以在给定行中的某些字符串的情况下使用 sed 切换 bash 中行的位置?

例如:

我有台词

2. diskusage1: 27.0572519084
3. partition1: 

它们都作为 bash 命令的一部分输出到文本文件。

有没有办法颠倒这些行的顺序?让他们换个地方看起来像这样:

3. partition1: 
2. diskusage1: 27.0572519084

谢谢

【问题讨论】:

  • 是的,将产生输出的任何内容的输出通过管道传输到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'
  • 要切换到任意行,请查看this question

标签: bash text sed text-processing


【解决方案1】:

继续 cmets,是的,您可以使用 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

试一试,如果您还有其他问题,请告诉我。

【讨论】:

  • 看起来第 2 和第 3 不只是行。
  • 是的,同意,好点,但我只能继续问题中的内容。如果是 1-50,那么我们需要创造性地使用计数器和 readreadarraytac 或排除范围与 sedheadtail 与 @ 的组合987654340@.
【解决方案2】:

这样就可以了:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-04-09
    • 1970-01-01
    • 1970-01-01
    • 2017-01-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多