Обычный ответ zsh
на подобный вопрос:
autoload zmv # best in ~/.zshrc
zmv -v '(**/)(* *)' '$1${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:
Перл спешит на помощь!
perl -pe 'if (s/^\t(\t*)//) {
$n[ length $1 ]++;
splice @n, 1 + length $1;
}
print $1, join(".", @n), ": " ' -- file
s/^\t(\t+)//
удаляет ведущие вкладки, но захватывает их (без первого )в $1
. @n
используется для хранения чисел. Число, соответствующее текущей глубине, увеличивается на ++
, а остальные числа удаляются (на случай, если вы начинаете новый, менее вложенный раздел ).