확장된 명령 이해

확장된 명령 이해

-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 44자마다 탭 정지가 있습니다.

탭은 고정된 수의 공백을 삽입하지 않고 다음 위치로 이동하므로 추가되는 공백의 수는 탭 앞의 텍스트 길이에 따라 달라집니다. 예를 들어:

$ 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부터 번호를 매기기 시작합니다.

관련 정보