我正在尝试制作 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