coreutils 매뉴얼에서 pr
:
‘-e[in-tabchar[in-tabwidth]]’ ‘--expand-tabs[=in-tabchar[in-tabwidth]]’
입력 시 탭을 공백으로 확장합니다. 선택적 매개변수 in-tabchar는 입력 탭 문자입니다(기본값은 TAB 문자). 두 번째 선택적 매개변수 in-tabwidth는 입력 탭 문자의 너비입니다(기본값은 8).
-e[in-tabchar[in-tabwidth]]
각각을 여러 개의 공백으로 바꾸는 것을 의미합니까?in-tabchar
in-tabwidth
아래 두 예에서 , 및 가 하나 의 공백으로 구분되어 있는 반면, 첫 번째 예에서는 sum이 세 개의 공백으로 구분되고 , 두 번째 예에서는 sum이 두 개의 공백으로 구분되는 이유는 무엇 a
입니까 ? 감사해요.b
c
1
3
$ printf "a:b:c\n1::3\n" | pr -t -e:2
a b c
1 3
$ printf "a:b:c\n1::3\n" | pr -t -e:1
a b c
1 3
답변1
pr -e
명령과 동일한 작업을 수행합니다 expand
. 일반적으로 터미널 에뮬레이터와 유사한 방식으로 탭을 확장합니다. TAB은 커서를 다음 탭 정지로 이동시키는 것으로 터미널이 인식하는 제어 문자로, 테이블 서식 지정 및 정렬에 사용됩니다.
대부분의 터미널에서는 기본적으로 탭 정지가 8열마다 발생합니다. 따라서 TAB을 보내는 것은 현재 커서 위치에 따라 1에서 8 사이에 여러 공백을 보내는 것과 동일한 효과를 갖습니다.
$ printf '%b\n' 'a\tb' 'abcde\tg'
a b
abcde g
첫 번째 탭은 커서를 오른쪽으로 7칸 이동하고, 두 번째 탭은 오른쪽으로 3칸 이동합니다.
pr -e
\t
동일한 효과를 얻기 위해 필요한 만큼의 공백으로 대체합니다 .
$ printf 'abcde\tg\n' | sed l
abcde\tg$
abcde g
$ printf 'abcde\tg\n' | pr -te | sed l
abcde g$
abcde g
GNU에는 pr
GNU와 동일한 제한 사항이 있습니다. expand
즉, 모든 문자가 1바이트로 구성되고 표시를 위해 1열을 차지한다고 가정합니다.