들여쓰기된 텍스트 단락을 인쇄하는 bash 스크립트

들여쓰기된 텍스트 단락을 인쇄하는 bash 스크립트

텍스트 구절을 반영하는 bash 스크립트가 있습니다. 들여쓰기를 하고 싶습니다.

예:

echo "Something"
echo -e "\tfoo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo"

다음과 같이 인쇄됩니다.

Something
      foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo 
foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo 
foo foo foo foo foo foo foo foo foo foo foo foo

하지만 내가 원하는 것은 이것이다.

Something
    foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo 
    foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo 
    foo foo foo foo foo foo foo foo foo foo foo foo

나는 이러한 단락 중 많은 부분을 수동으로 래핑하는 것을 피하는 것을 선호합니다.

사용된 다양한 기술 등을 보았지만 sed쉘 내장 기능에만 의존하면 됩니다(최대한 간단해야 합니다).

고쳐 쓰다
이렇게 표현하면 man페이지(임의의 명령에 대해)가 이러한 모든 단락의 형식을 어떻게 훌륭하게 지정합니까? 설마 손으로 자른 건 아니겠지? 기본 명령어를 로깅할 때 내장 명령어 외에 다른 것은 사용하지 않는 것 같은데요?

답변1

somecommand | fold | awk '{ print "\t" $0 }'

somecommand예를 들어 에서 출력을 가져와 echo로 보내면 fold80자로 축소됩니다( fold -w N접는 N문자의 경우). 그러면 스크립트는 awk탭으로 들여쓰기된 각 줄을 인쇄합니다.

순수하게 접는 것은 bash필연적으로 더 복잡한 스크립트로 이어질 것입니다.

답변2

fmt(GNU Coreutils에서) 어떻습니까?

{ echo "Something"
echo -e "\tfoo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo"
} | fmt
Something
    foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo
    foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo
    foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo
    foo foo foo foo foo foo foo foo foo foo foo foo

-w n줄 바꿈 길이를 변경하는 옵션을 추가할 수 있습니다 .n

관련 정보