쉘 스크립트 출력 들여 쓰기


2

다른 스크립트 내에서 쉘 스크립트 / 응용 프로그램을 호출하고 싶습니다. 포함 된 스크립트의 모든 줄은 2 칸 들여 쓰기해야합니다. 이것이 가능한가?

출력은 다음과 같아야합니다.

I'm the main-scripts' output.
  I'm a second script, called inside the main-script.
  Every line of my output is indented by 2 spaces.
  This is not implemented inside of me, but in the main-script
  as I should also be called outside of the main-script and then
  my output shouldn't be indented.
Thats all from the second script.

이것이 가능하고 어떻게?

답변:


2

sed또는 사용할 수 있습니다 awk. 예를 들어 기본 스크립트에서 다음을 수행 할 수 있습니다.

# execute the command and pipe to sed
second-script | sed 's/\(.*\)/  \1/'

위의 sed명령은에서 각 출력 행에 두 개의 공백을 추가합니다 second-script.


2

유닉스에서 항상 그렇듯이 옵션이 있습니다.

paste

paste빈 LHS 파일과 함께 유틸리티를 사용하십시오 ( 예 :

cat ~/.bashrc | paste /dev/null -

cat명령은 두 번째 스크립트의 자리 표시 자입니다.

paste명령은 두 개의 파일을 가져 와서 다음과 같이 구성합니다.

$ paste file1 file2
file 1 line 1    <TAB>  file 2 line 1
file 1 line two  <TAB>  file 2 line 2
file 1 line 3    <TAB>  file 2 line iii

내가 위에서 그것을 사용하고 방법은 사용하는 것 /dev/null같은 file1, 그리고 STDINfile2에 의해 지정 -. 입력으로 사용되면 /dev/nullNULL 문자를 반환합니다. 이것은 file2두 번째 스크립트의 출력 인의 모든 행 앞에 NULL이 있고 TAB 문자가옵니다.

더 나아갈 수 있습니다 paste. --delimiter옵션이 있지만 두 개의 공백을 지정해도 예상되는 효과가 없습니다. 구분 기호 1 은 첫 번째 열과 두 번째 열 사이에 사용되고 구분 기호 2 는 두 번째와 세 번째 열 사이에 사용됩니다.

paste|expand

두 칸 들여 쓰기를하려면 평문을 paste다시 사용합니다 expand -2. 이렇게하면 모든 탭이 두 칸으로 바뀝니다.

cat ~/.bashrc | paste /dev/null - | expand -2

지정한대로 정확하게 동작합니다.

sed 또는 awk

또 다른 방법은 사용하는 것입니다 sedawk:

cat ~/.bashrc | sed 's/^/  /'

이것은 줄의 시작 ( " ^")을 검색 하고 한 쌍의 공백을 대체하거나 삽입합니다.

cat ~/.bashrc | awk '{printf "  %s\n",$0}'

이것은 각각의 전체 라인 ( " $0")을 취하여 printf두 공백의 형식 지정자를 사용하여 인쇄 한 문자열과 개행을 차례로 사용하여 형식을 지정합니다.


위의 모든 명령은 cat파이프 라인을 제거 할 수 있습니다 ( 예 paste /dev/null ~/.bashrc: 또는 paste /dev/null ~/.bashrc|expand -2, 동일 sed 's/^/ /' ~/.bashrc또는) awk '{printf " %s\n",$0}' ~/.bashrc. cat파이프 라인에서 처음 사용하는 것은 종종 초보자 오류로 간주됩니다 .


1
sed의 청결한 사용을 위해 +1
Jim L.

@JimL. 난 그냥의 가증스러운 죄를 범하고있어 실현 , 그리고 모든 인수로 파일 이름을. 부끄러운 짓을한다 내 방어에서 "내 생각은 어땠어?" 파일 이름이 항상 다른 곳에 사용되도록 동일한 위치에 있도록 명확하게 나타납니다 . cat ... | <command>pastesedawk
Rich
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.