sed打印标题

sed打印标题

我正在尝试制作 sed 脚本,该脚本采用编号标题并将它们写入没有数字的树结构中:

这是输入:

1. Text1
1.1 Text2
1.1.1 Text3
1.1.1.1 Text4
1.1.1.1.1 Text5
2. Text6
2.1 Text7

这将是具有表示空间的所需输出.

Text1
.Text2
..Text3
...Text4
....Text5
Text6
.Text7

答案1

在每个 Unix 机器上的任何 shell 上使用任何 awk:

$ awk '{sub(/\.$/,"",$1); gsub(/[^.]/,"",$1); sub(/ /,"")}1' file
Text1
.Text2
..Text3
...Text4
....Text5
Text6
.Text7

仅修改和打印以问题中的编号类型开头的行将类似于(未经测试):

awk '/^([0-9]\.)+[0-9]* /{sub(/\.$/,"",$1); gsub(/[^.]/,"",$1); sub(/ /,""); print}' file

上面的代码会将“Text”中的所有连续空格链更改为单个空白字符。如果这是一个问题,很容易修改为不这样做,但同样,您确实需要提供“文本”的示例输入/输出来涵盖此类用例。

答案2

sed -r 's/^[0-9]+(\. )?//;s/\.[0-9]+/./g;s/^(\.*) /\1/' inputfile

这仅输出修改后的行:

sed -rn '/^[0-9]+((\. )|((\.[0-9]+)* ))/{s/^[0-9]+(\. )?//;s/\.[0-9]+/./g;s/^(\.*) /\1/;p}' inputfile

相关内容