번호가 매겨진 헤더를 가져와서 숫자 없이 트리 구조에 쓰는 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 시스템의 모든 쉘에서 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
위의 코드는 "텍스트"의 모든 연속 공백 체인을 단일 공백 문자로 변경합니다. 이것이 문제가 된다면 이를 수행하지 않도록 쉽게 수정할 수 있지만, 이러한 사용 사례를 다루려면 "텍스트"의 입력/출력 예제를 제공해야 합니다.
답변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