-t
명령의 인수가 어떻게 작동하는지 잘 이해할 수 없습니다 expand
. 다음은 해당 맨페이지에서 발췌한 것입니다.
NAME
expand - convert tabs to spaces
...
-t, --tabs=N
have tabs N characters apart, not 8
그것은 무엇을 합니까?N 문자로 구분된 탭의미는? 몇 가지 테스트를 해봤습니다.
root@u2004:~# printf "a\tb\n"
a b
root@u2004:~# printf "a\tb\n" | od -a
0000000 a ht b nl
0000004
root@u2004:~# printf "a\tb\n" | expand | od -a
0000000 a sp sp sp sp sp sp sp b nl
0000012
root@u2004:~# printf "a\tb\n" | expand -t 4 | od -a
0000000 a sp sp sp b nl
0000006
root@u2004:~# printf "a\tb\n" | expand -t 5 | od -a
0000000 a sp sp sp sp b nl
0000007
root@u2004:~#
보시다시피 를 전달하면 -t 4
탭 문자가 3개의 공백으로 대체됩니다. 그렇다면 실제로 "4문자로 구분된 탭"은 탭이 3개의 공백으로 대체된다는 의미일까요? 내가 이해할 수없는. 그런데 저는 영어가 모국어가 아닙니다. 이는 영어 관련 문제일 수 있습니다.
답변1
라벨을 가리킨다멈추다, 탭이 이동하는 위치입니다. 의 경우 -t 4
4자마다 탭 정지가 있습니다.
탭은 고정된 수의 공백을 삽입하지 않고 다음 위치로 이동하므로 추가되는 공백의 수는 탭 앞의 텍스트 길이에 따라 달라집니다. 예를 들어:
$ printf "1\tx\n" | expand -t 4 | od -a
0000000 1 sp sp sp x nl
0000006
$ printf "123\tx\n" | expand -t 4 | od -a
0000000 1 2 3 sp x nl
0000006
물론 요점은 열을 정렬하는 것입니다.
$ printf "123\tx\n1\tx\n" |expand -t4
123 x
1 x
따라서 이를 시각적으로 표현하기 위해 탭 정지 위치는 ^
다음과 같이 표시됩니다.
123412341234...
^ ^ ^
(물론 맨 처음으로 탭할 수는 없으므로 첫 번째 탭은 실제로 존재하지 않습니다.)
그러나 필드가 탭 정지 거리보다 길면 상황이 복잡해지지만 expand
대안으로 열 위치 목록이 필요합니다. 예를 들어 너비가 4개인 열과 너비가 8개인 열이 있습니다.
$ printf "%b\n" 'A\t1234567\thello' 'B\t987\tworld' |expand -t4,12
A 1234567 hello
B 987 world
거기 있는 사이트는 다음과 같습니다.
11111111112
012345678901234567890...
A 1234567 hello
B 987 world
^ ^
위치가 명령줄에 지정된 숫자와 일치하도록 0부터 번호를 매기기 시작합니다.