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
'줄이다'는 '줄이다'의 또 다른 말입니다. tr
패턴에 따라 -t
옵션을 완전히 무시합니다. [올바른 옵션을 사용했는지 확인하기 위해] 자동 완성하면 --truncate-set1
동일한 출력이 생성됩니다.
질문: 내가 여기서 뭘 잘못하고 있는 걸까?
저는 Debian 기반 Distro의 BASH에서 작업합니다.
업데이트
아래 댓글은 제가 쓴 댓글이니 참고해주세요
나는 생각했다tr -t
의미는 다음과 같다.string1을 string2의 길이로 줄입니다.. 나는 그것이 a
로 번역되는 것을 봅니다 1
. 그것은 b
으로 번역될 것이고 2
그것은 c
으로 번역됩니다 3
. 단축과는 관련이 없습니다. '잘라내다'는 제가 생각했던 것과는 다른 뜻인 것 같습니다. [저는 원어민이 아닙니다.]
답변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