sed 인쇄 제목

sed 인쇄 제목

번호가 매겨진 헤더를 가져와서 숫자 없이 트리 구조에 쓰는 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

관련 정보