column
Unix 명령을 사용하여 일부 텍스트의 서식을 지정 하고 싶습니다 . 탭으로 구분된 필드가 있지만 각 필드 내에 공백도 있습니다. column
공백(탭 및 공백)으로 구분됩니다. 열에서 탭 문자만 구분 기호로 사용하도록 하려면 어떻게 해야 합니까?
다음을 사용하여 탭 문자를 구분 기호로 지정하려고 합니다.
cat myfile | column -t -s"\t"
답변1
열 -t -s '\t'
\
열은 및 문자로 구분됩니다 t
.
column -s \t
column -s 't'
쉘이 이를 인용 연산자로 해석하므로 백슬래시 와 동일합니다 .
여기서는 실제 탭 문자를 열에 전달하려고 합니다. ksh93, zsh, bash, mksh, busybox sh 또는 FreeBSD sh 사용:
column -ts $'\t'
Ctrl-V Tab셸 프롬프트에 입력하거나 (탭은 공백과 마찬가지로 셸 구문의 토큰 구분 기호이므로 따옴표 안에 또는 앞에 백슬래시가 붙음) 연산자를 사용하여 실제 탭 문자를 입력합니다. "$(printf '\t')"
+glob에 필요한 큰따옴표 분할 비활성화) 탭 문자도 $IFS
기본값인 )에 있기 때문입니다 .
답변2
POSIX의 경우 $'...'
정의되지 않았습니다. 즉, ANSI-C 이스케이프입니다.
대신에 다음을 사용할 수 있습니다.POSIX$(printf '\t')
:
column -t -s "$(printf '\t')"
$(printf '\011')
011
(10진수 9의 8진수 표현)은 가로 탭 문자에 대한 ANSI 코드이기 때문에 작동합니다 .
column -t -s "$(printf '\011')"
하지만 이번 리뷰에서는 그렇게 하지 않는 것이 좋습니다.그리고 Stéphane Chazelas의 답변. 이는 POSIX가 지정하지 않기 때문에 쉘 버전 간에 일관성이 없을 수 있기 때문입니다.코딩TAB의 값은 다음과 같습니다. C 로케일 인코딩이 EBCDIC를 기반으로 하는 POSIX 시스템이 여전히 있습니다. 여기서 TAB는 ASCII와 같이 9 대신 5입니다. \t
이러한 문제를 방지하려면 가능할 때마다 이름(여기)으로 문자를 인용하는 것이 가장 좋습니다 . $'...'
2018년 9월 10일부터 POSIX 사양의 다음 주요 버전에 포함될 예정입니다 .
답변3
답변4
-t
원하는 열 수를 선택하는 데 사용됩니다 . 이 항목을 비워두면 아무 것도 변경되지 않습니다. 또한 그 뒤에 공백이 있어야 하므로 -s
다음을 시도해 보십시오.
cat myfile | column -s \t