tr -t
명령을 사용할 때 string1
길이만큼 잘려야 겠죠 string2
?
tr -t abcdefghijklmn 123 # abc... = string1, 123 = string2
the cellar is the safest place # actual input
the 3ell1r is the s1fest pl13e # actual output
"Truncation"은 "단축"의 또 다른 말입니다. 그렇죠? tr
이 옵션을 완전히 무시하고 패턴에 따라 번역합니다 -t
. [올바른 옵션을 사용하고 있는지 확인하기 위해] 자동 완성하면 --truncate-set1
동일한 출력이 생성됩니다.
질문: 내가 여기서 뭘 잘못하고 있는 걸까요?
저는 데비안 기반 배포판에서 BASH를 사용하여 작업합니다.
고쳐 쓰다
이 내용은 아래 내 의견의 사본입니다.
제가 생각한 의미는 tr -t
다음과 같습니다.string1을 string2의 길이로 줄입니다.. 나는 그것이 a
로 번역되는 것을 봅니다 1
, 그것은 b
으로 번역될 것입니다 2
, 그것은 c
으로 번역됩니다 3
. 단축과는 관련이 없습니다. 'Truncate'는 제가 생각했던 것과는 다른 의미인 것 같습니다. [저는 원어민이 아닙니다.]
답변1
tr -t 명령을 사용할 때 string1은 string2의 길이로 잘려야 겠죠?
이런 일이 일어난 것 아닌가요?
abcdefghijklmn
123
어떤 문자가 바뀌고 어떤 문자가 바뀌지 않는지 확인하세요.
the 3ell1r is the s1fest pl13e
'a' 및 'c'. 단, 원래(잘리지 않은) 세트 1에서는 e, f, i 또는 l이 아닙니다.
그렇지 않은 경우 -t
다음을 얻게 됩니다.
t33 33331r 3s t33 s133st p3133
그 이유는 (에서 man tr
),"SET2는 SET1의 길이만큼 확장됩니다.마지막 문자를 반복하여필요한. " 따라서 잘린 세트 1이 없으면 -t
다음과 같습니다.
tr abcdefhijklmn 1233333333333
또 다른 예를 고려해 보겠습니다. 단, 동일한 "지하실이 가장 안전한 장소입니다"를 입력으로 사용합니다.
> input="the cellar is the safest place"
> echo $input | tr is X
the cellar XX the XafeXt place
이는 두 번째 그룹이 첫 번째 그룹의 모든 내용을 포함하도록 자동으로 확장되기 때문입니다. -t
본질적으로반대로 해라;두 번째 그룹을 확장하는 대신 첫 번째 그룹을 자릅니다.
> echo $input | tr -t is X
the cellar Xs the safest place
이는 다음과 같습니다.
> echo $input | tr i X
the cellar Xs the safest place
's'는 첫 번째 그룹에서 잘렸기 때문입니다. 두 세트의 길이가 같으면 다음을 -t
사용해도 아무런 차이가 없습니다.
> echo $input | tr is XY
the cellar XY the YafeYt place
> echo $input | tr -t is XY
the cellar XY the YafeYt place