확장되지 않은 설명서를 읽고 답변을 읽어 보았습니다.여기하지만 unexpand가 tablist를 매개변수로 사용하는 방법을 이해하지 못합니다.
다음을 시도하면 (공백 2개와 공백 3개가 탭으로 변환될 것으로 예상됨)
$ unexpand -t 2,3,4
12**345***678
알겠어요
12\t\t345***678
*
공간을 나타냅니다( *
명확성을 위해 이것을 사용함). 공백이 3개 있는데 왜 2 뒤에는 탭이 두 개 있고 5 뒤에는 탭이 없는지 모르겠습니다.
또한 다음을 시도했습니다(두 번째 및 다섯 번째 열의 공백이 탭으로 변환될 것으로 예상).
$ unexpand -t 2,5
1*23*4567
알겠어요
1*23*4567
나도 시도했다
$ unexpand -t 2,5
1**2*****345
알겠어요
1\t*2*****345
매개변수가 여러 개인 경우 프로그램이 tablist 매개변수를 어떻게 해석하는지 이해할 수 없습니다.
답변1
unexpand
그 반대로 하세요 expand
. 이렇게 하면 unexpand -t 2,3,4 | expand -t 2,3,4
원래 있던 곳으로 돌아가야 합니다.
이 숫자는 탭 사이의 거리가 아니라 위치(화면 왼쪽으로부터의 거리)를 나타냅니다.
첫 번째 탭 정지를 오프셋 2(세 번째 열)로 설정 -t 2,3,4
하고, 두 번째 탭 정지를 오프셋 3으로, 세 번째 탭 정지를 오프셋 4로 설정하면 그게 전부입니다.
↓↓↓
0123456
$ printf '%b|\n' '\t' '\t\t' '\t\t\t' | expand -t2,3,4
|
|
|
1, 2, 3 탭은 다음 위치에 있습니다.
123
이것을 다음과 결합하면:
123
12**345***678
3
세 번째 탭 정지에 있으므로 거기 2
에 가려면 두 개의 탭이 필요합니다. 첫 번째 탭은 두 번째 탭 정지로 이동하고(이미 첫 번째 탭 정지에 도달했으므로) 두 번째 탭은 두 번째 탭 정지로 이동합니다. 세 번째 탭 정지. 그 이후에는 탭이 없으므로 공백이 탭으로 변환되지 않습니다.
두 번째 탭 정지가 두 번째 탭 정지 뒤의 3열이 되도록 하고 세 번째 탭 정지가 두 번째 탭 정지 뒤의 4열이 되도록 하려면 다음이 필요합니다 -t 2,5,9
.
↓ ↓ ↓
0123456789
$ printf '\t1\t2\t3\n' | expand -t 2,5,9
1 2 3
그러면 다음을 얻게 됩니다:
↓ ↓ ↓
01234567890
$ echo '12 345 678' | unexpand -t 2,5,9 | sed -n l
12 345\t 678$
un
expand
( ) 와 tabs
(지원하는 터미널에 탭을 설정하는 명령) 의 차이점에 유의하세요 .
- 의 경우
tabs
열은 0이 아닌 1부터 시작하여 번호가 매겨집니다. tabs -8
(대신 ) 8개 열마다 탭 정지 설정을 사용합니다expand -t 8
(실제로는 이와 비슷tabs 9 17 25 33...
하지만 그것도 사용할 수 있습니다tabs 9 +8 +8 +8...
).