번호가 매겨진 제목

번호가 매겨진 제목

공백을 계층적 번호 목록으로 변환해야 하는데 이를 달성하기가 어렵습니다.

이것이 내가 추구하는 것입니다:

입력(표시):

    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: 

관련 정보