我需要将空格转换为分层的编号列表,但发现这很难实现。
这就是我所追求的东西:
输入(可见):
Project #1
Subproject
Task
Project #2
Subproject
Task
Task
输入(原始):
\tProject #1
\t\tSubproject
\t\t\tTask
\tProject #2
\t\tSubproject
\t\t\tTask
\t\t\tTask
期望的输出:
1: Project #1
1.1: Subproject
1.1.1: Task
2: Project #2
2.1: Subproject
2.1.1: Task
2.1.2: Task
答案1
Perl 来救援!
perl -pe 'if (s/^\t(\t*)//) {
$n[ length $1 ]++;
splice @n, 1 + length $1;
}
print $1, join(".", @n), ": " ' -- file
s/^\t(\t+)//
删除前导选项卡,但将它们(不包括第一个选项卡)捕获到$1
.- 数组
@n
用于保存数字。与当前深度对应的数字增加++
,其余数字将被删除(如果您要开始一个新的、嵌套较少的部分)。
答案2
解决方案(可以稍微优化):
$ cat file | perl -pe 's/^/\t/' | perl -pe 'if (s/^(\t+)//) {
$n[length($1)-1]++;
splice @n, length $1;
}
print $1, join(".", @n), ": " ' | perl -pe 's/^\t//'
1: Project #1
1.1: Subproject
1.1.1: Task
2: Project #2
2.1: Subproject
2.1.1: Task
2.1.2: Task
3: