tr
rot13 변환 을 사용하고 싶습니다 . 이 명령을 아름답게 이해할 수 있습니다.
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"
그래서 두 가지 질문이 있습니다.
- 두 번째
tr
명령 의 마술은 무엇입니까 ? - 첫 번째 명령과 마찬가지로 두 번째 명령을 소문자와 대문자로 작동시키는 방법은 무엇입니까?
답변
다음과 같이 작동합니다.
SET1-> .............ABCDEFGHIJKLMNOPQRSTUVWXYZ
SET2-> ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLM
로 tr
번역 SET1
됩니다 SET2
.
이는 13
13 개의 점이있을 때 단위로 이동하기 때문에 첫 번째와 같습니다 .
소문자를 포함 시키려면 SET1
비슷한 오프셋 으로 정렬해야합니다 . 예 :
.............ABCDEFGHIJKLMNOPQRSTUVWXYZ..........................abcdefghijklmnopqrstuvwxyz
ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyzabcdefghijklm
즉 (26) 사이의 점의 Z
와 a
절반 대문자 절반 소문자 알파벳에 걸쳐. 따라서 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..."