좋아, @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..."