답변:
column -t -s '\t'
에 열을 분리 할 \
및 t
문자를.
column -s \t
column -s t
백 슬래시는 쉘에서 인용 연산자로 해석되므로 .와 동일 합니다.
여기서 실제 TAB 문자를 열에 전달하려고합니다. ksh93, zsh, bash, mksh, busybox sh 또는 FreeBSD sh를 사용하는 경우 :
column -ts $'\t'
또는 Ctrl-V Tab쉘 프롬프트에서 따옴표로 입력하거나 (공백과 같이 셸 구문에서 탭 문자가 토큰 구분 기호이므로 백 슬래시가 앞에 옴) 실제 탭 문자를 입력 하거나 "$(printf '\t')"
, split + glob를 비활성화하는 데 큰 따옴표가 필요합니다. 탭 문자로서의 연산자도 기본값 인 $IFS
)이됩니다.
$'\t'
탭을 구분자로 만듭니다. 그러나 awk -F "\t"
탭을 awk의 구분 기호로 사용한다고 확신 합니다. 열이 아닌 왜 작동합니까?
POSIX의 경우 $'...'
ANSI-C 이스케이프라고하는을 정의하지 않았습니다.
대신 다음을 사용할 수 있습니다 $(printf '\t')
.
column -t -s "$(printf '\t')"
$(printf '\011')
011
(십진수 9의 8 진 표현)은 가로 탭 문자의 ANSI 코드이므로 사용할 수 있습니다 .
column -t -s "$(printf '\011')"
그러나 쉘 버전에서 이것이 일관성이없는 이유에 대해서는 Stéphane Chazelas의 아래 주석을 참조하십시오.
"$(printf '\t')"
내 답변에 표시된 것과 같은 종류의 문제를 피하기 위해 이름으로 문자를 참조하는 것이 좋습니다 . 참고이 $'...'
는 POSIX 사양의 다음 주요 버전에 포함될 예정입니다.
$(printf '\t')
POSIX입니까? 감사합니다!
column -t -s $'\t'
배쉬이 생각하는 것처럼 보였던 것에'\t'
모두 의미\
하고t
있지만,$'\t'
리터럴 탭을 의미한다. 강타 악취