tr -t 명령을 사용하세요. [이해력 질문]

tr -t 명령을 사용하세요. [이해력 질문]

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

관련 정보