sed - 使用sed以树结构打印文本行

标签 sed

假设我有这样的文字:

Lorem ipsum Lorem ipsum
Lorem ipsum Lorem ipsum
1. Row1 Lorem ipsum Lorem ipsum
Lorem ipsum Lorem ipsum
1.1 Row 2 Lorem ipsum Lorem ipsum
Lorem ipsum Lorem ipsum
1.1.1 Row 3 Lorem ipsum Lorem ipsum

行首的数字只能由带点的“1”组成,可以到多级“1.1.1.1.1”等。 我想使用 sed 命令将那些带有数字的行作为目标,并在没有这些数字的情况下以三种结构打印它们,因此结果将是:

Row1 Lorem ipsum Lorem ipsum
  Row 2 Lorem ipsum Lorem ipsum
    Row 3 Lorem ipsum Lorem ipsum

我试过这个命令 sed -rn 's/1.|1.1|1.1.1/'$'\t/p' Book2.txt 但这不会以树结构打印它。我只能使用 sed 命令。

你能帮帮我吗?

最佳答案

这可能对你有用(GNU sed):

sed -nE '/^1\./{:a;s/^(\s*)1\.?/\1  /;ta;s/  //p}' file

1. 开头的行替换为每个 1. 或单个 1 的 2 个空格,然后将缩进减少 2 个空格并打印结果。

如果首选制表符,这 2 个空格可以替换为 \t

关于sed - 使用sed以树结构打印文本行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64683945/

相关文章:

linux - 使用变量替换每隔两次出现的模式

linux - 如何将字符串添加到文本文件中的第 13 行

linux - SED:在同一行的两个模式之间插入一个词/字符串

sed - 无法在 aks 中启动 apache-nifi

string - 将字符串转义为 sed 替换模式

bash - 将包含反斜杠的字符串读入 bash 中的变量

linux - 如何使用 bash 将未加引号的地址包装在文件中?

regex - 未终止的 `s' 命令,找不到我的错误

linux - 更新特定行中文本文件中的特定字段

regex - 使用正则表达式从 fasta 文件中获取特定序列