내 grep 출력에는 각 후속 행에서 들여쓰기가 1씩 증가하는 행이 표시되어야 합니다.
grep 명령 출력은 다음과 같습니다.
답변1
GNU를 사용하면 awk
파일의 줄 번호에서 1을 뺀 공백 수만큼 들여쓰기된 각 입력 줄을 출력할 수 있습니다.
grep ... | awk '{ printf "%2$*1$s\n", NR+length-1, $0 }'
여기에 사용된 형식 문자열은 필드 너비가 첫 번째 인수( 입력의 현재 줄의 시퀀스 번호에 줄의 길이를 더한 값에서 1을 뺀 값) 로 제공되는 printf
두 번째 문자열 인수(즉, 현재 줄)의 출력을 지정합니다. ). 이것의 효과는 당신이 정확히 원하는 것과 같은 엇갈린 방식으로 라인 출력을 얻게 된다는 것입니다.$0
NR+length-1
대부분의 비 GNU 구현은 awk
이 상위 수준 printf
형식의 사용을 지원하지 않으므로 이를 다르게 해결해야 합니다.
grep ... | awk '{ print indent $0 } { indent = indent " " }'
위의 명령은 첫 번째 명령보다 이해하기 쉬울 수 있습니다 awk
. 이라는 변수를 사용하고 있습니다 indent
. 이 변수에는 공백만 포함되어 있으며 현재 값 앞에 의 접두사가 붙은 현재 출력 줄 뒤의 각 입력 줄에 새 공백 문자를 추가합니다 indent
.
위의 두 파이프에는 질문을 전달하는 동안 언급한 명령을 grep ...
나타냅니다 .grep