텍스트 구절을 반영하는 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
로 보내면 fold
80자로 축소됩니다( 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