이 tr 명령의 점은 무엇입니까? tr… AZ A-ZA-Z <<<“JVPQBOV”(13 점) 싶습니다 . 이 명령을 아름답게

trrot13 변환 을 사용하고 싶습니다 . 이 명령을 아름답게 이해할 수 있습니다.

tr A-Za-z N-ZA-Mn-za-m <<< "URYC ZR CYRNFR"

어떤 출력이 HELP ME PLEASE이지만이 다른 명령이 어떻게 동일한 rot13 변환을 생성 할 수 있는지 알 수 없습니다.

tr .............A-Z A-ZA-Z <<< "URYC ZR CYRNFR"

그래서 두 가지 질문이 있습니다.

  1. 두 번째 tr명령 의 마술은 무엇입니까 ?
  2. 첫 번째 명령과 마찬가지로 두 번째 명령을 소문자와 대문자로 작동시키는 방법은 무엇입니까?


답변

다음과 같이 작동합니다.

SET1-> .............ABCDEFGHIJKLMNOPQRSTUVWXYZ
SET2-> ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLM

tr번역 SET1됩니다 SET2.

이는 1313 개의 점이있을 때 단위로 이동하기 때문에 첫 번째와 같습니다 .

소문자를 포함 시키려면 SET1비슷한 오프셋 으로 정렬해야합니다 . 예 :

.............ABCDEFGHIJKLMNOPQRSTUVWXYZ..........................abcdefghijklmnopqrstuvwxyz

ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyzabcdefghijklm

즉 (26) 사이의 점의 Za절반 대문자 절반 소문자 알파벳에 걸쳐. 따라서 tr명령 자체는 다음과 같습니다.

tr .............A-Z..........................a-z A-ZA-Za-za-z

답변

@Prvt_Yadv가 답변에서 말했듯이 13 개의 점이 있기 때문에 작동합니다.

세트는

First set:  .............ABCDEFGHIJKLMNOPQRSTUVWXYZ
Second set: ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZ

점은 특수 문자가 아니므로 입력에 점이 있으면 변환됩니다. tr내가 가진 버전 에서 두 번째 세트의 마지막 해당 문자입니다.이 경우 M:

$ echo URYC ZR CYRNFR. | tr .............A-Z A-ZA-Z
HELP ME PLEASEM

(다른 버전의 tr세트 2에서 첫 번째로 일치하는 문자를 사용할 수 있다고 상상할 수 있습니다 A.

두 번째 질문에 답하려면 첫 번째 세트에 다른 13 개의 점이 있어야 세트 2의 나머지 대문자를 “사용”할 수 있습니다.

First set:  .............ABCDEFGHIJKLMNOPQRSTUVWXYZ.............
Second set: ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZ

그런 다음 패턴을 반복 할 수 있습니다.

First set:  .............ABCDEFGHIJKLMNOPQRSTUVWXYZ..........................abcdefghijklmnopqrstuvwxyz
Second set: ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz

그것은 우리에게 :

tr .............A-Z..........................a-z A-ZA-Za-za-z

그래서 :

$ echo Uryc zr cyrnfr | tr .............A-Z..........................a-z A-ZA-Za-za-z
Help me please

개인적으로, 나는 당신의 질문에 그것을하는 첫 번째 방법이 더 간단하다고 생각합니다!

첫 번째 방법은 입력의 다른 문자도 변환하지 않습니다. 예를 들어, 다음을 비교하십시오.

$ echo Uryc zr cyrnfr. | tr .............A-Z..........................a-z A-ZA-Za-za-z
Help me pleasem

$ echo Uryc zr cyrnfr. | tr A-Za-z N-ZA-Mn-za-m
Help me please.

답변

좋아, @Prvt_Yadv 덕분에 점을 이해할 수있었습니다. 첫 번째 질문 답변은 다음과 같습니다.

두 번째 tr명령 의 마술은 무엇입니까 ?

13 개의 점은 단순히 두 번째 세트의 처음 13 자에 매핑됩니다. 그래서

tr .............A-Z A-ZA-Z 다음 세트를 생성합니다 :

SET1 -> .............ABCDEFGHIJKLMNOPQRSTUVXWYZ
SET2 -> ABCDEFGHIJKLMNOPQRSTUVXWYZABCDEFGHIJKLMNOPQRSTUVXWYZ

입력에 점이 포함되어 있지 않으면 대체를 사용하지 않기 때문에 초기 시퀀스를 무시할 수 있습니다. 그러면 세트는 다음과 같습니다.

SET1 -> ABCDEFGHIJKLMNOPQRSTUVXWYZ
SET2 -> NOPQRSTUVXWYZABCDEFGHIJKLMNOPQRSTUVXWYZ

그러나 첫 번째 세트에는 이미 26 개의 문자가 모두 포함되어 있고 set2에는 반복되는 후행 문자가 있으므로 해당 문자도 버려져 결국에는

SET1 -> ABCDEFGHIJKLMNOPQRSTUVXWYZ
SET2 -> NOPQRSTUVXWYZABCDEFGHIJKLM

rot13 대체이며 첫 번째 명령과 동일합니다 (여기에서는 소문자를 다루지 않는 것을 제외하고). 질문 제목에 동일한 논리를 적용 할 수 있습니다.

tr ...A-Z A-ZA-Z <<< “JVPQBOV” 세트를 생성합니다 :

SET1 -> ...ABCDEFGHIJKLMNOPQRSTUVXWYZ
SET2 -> ABCDEFGHIJKLMNOPQRSTUVXWYZABCDEFGHIJKLMNOPQRSTUVXWYZ

초기 순서와 후행 반복 문자를 폐기하면 다음과 같이됩니다.

SET1 -> ABCDEFGHIJKLMNOPQRSTUVXWYZ
SET2 -> DEFGHIJKLMNOPQRSTUVXWYZABC

rot3 대체입니다.

두 번째 질문은 다음과 같습니다.

첫 번째 명령과 마찬가지로 두 번째 명령을 소문자와 대문자로 작동시키는 방법은 무엇입니까?

제대로 작동하려면 처음과 같이 원하는 수의 점을 배치하고 다음과 같이 썩음과 26 개의 점을 상위 시퀀스와 하위 시퀀스 사이에 일치시킵니다.

tr ........A-Z..........................a-z A-ZA-Za-za-z

이것은 무의미한 rot8을 성공적으로 생성합니다. 이것이 왜 작동하는지 시각화하기 위해 세트를 보자.

SET1 -> ........ABCDEFGHIJKLMNOPQRSTUVXWYZ..........................abcdefghijklmnopqrstuvxwyz
SET2 -> ABCDEFGHIJKLMNOPQRSTUVXWYZABCDEFGHIJKLMNOPQRSTUVXWYZabcdefghijklmnopqrstuvxwyzabcdefghijklmnopqrstuvxwyz

점 매핑 및 후행 문자 제외 :

SET1 -> ABCDEFGHIJKLMNOPQRSTUVXWYZabcdefghijklmnopqrstuvxwyz
SET2 -> IJKLMNOPQRSTUVXWYZABCDEFGHijklmnopqrstuvxwyzabcdefgh

이제 대문자와 소문자 모두에서 작동합니다 🙂

작동시키는 또 다른 방법 tr은 다음과 같이 두 가지 명령 을 사용하는 것입니다 .

tr .............A-Z A-ZA-Z <<< "ABJ V hqrefgnaq" | tr .............a-z a-za-z

@iruvar에서 점 대체를 사용하는 것에 대한주의 사항이 있습니다.이 명령은 입력 문자열에 점이 있으면 예상대로 작동하지 않습니다. 이는 점이 다른 문자에 매핑되고 대체를 수행 할 때 tr입력 된 점을 마지막으로 매핑 된 문자로 변경하기 때문입니다. 그러나 실제로 점 이외의 다른 문자를 사용할 수 있습니다. 따라서 tr명령에 점을 사용 하는 것이 문제가되면 @대신 사용할 수 있습니다 . 이것은 잘 작동합니다.

tr @@@@@@@@@@@@@A-Z A-ZA-Z <<< "GUNAX LBH NYY..."