이 tr 명령의 점은 무엇입니까? tr… AZ A-ZA-Z <<<“JVPQBOV”(13 점)


18

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. 첫 번째 명령과 마찬가지로 두 번째 명령을 소문자와 대문자로 작동시키는 방법은 무엇입니까?

13 개의 점이 있다는 것을 알고 있습니다. 내가 알고 싶은 것은 작동 방식입니다. 매뉴얼에 점에 대한 설명이 없습니다
Frederico Oliveira

4
입력 텍스트에 점이 표시되지 않기를 바랍니다.
iruvar

1
짧은 형식 tr [.*13].A-Z A-ZA-Z은 다음과 같이 작동합니다.tr .............A-Z A-ZA-Z
iruvar

답변:


17

다음과 같이 작동합니다.

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

14

@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.

1

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

3
"도트가 a부터 시작하여 여러 개의 문자로 대체됩니다"라고 결론을 내린 방법을 잘 모르겠습니다. 그것은 사실이 아닙니다. 마법이 없습니다. Prvt_Yadv가 설명했듯이 두 세트 tr가 있으며 항상 세트 1에서 세트 2로 매핑되지만이 경우 문자 .A, 및 B, 또한 ... 및으로 매핑했습니다 M. 이것은 당신의 입력은 포함되지 않기 때문에 중요하지 않습니다 .,하지만 그랬다면 그것이로 변신 것 M( tr사용 주어진 입력에 대해 지정하는 마지막 출력)
마이클 Mrozek

설명해 주셔서 감사합니다. 내 실수를 해결하기 위해 답변을 업데이트했습니다 :)
Frederico Oliveira

1
과학을 사용하여이 프로그램의 행동을 결정하려는 (초기) 시도에 감탄하지만, 앞으로는 가능한 많은 다른 가설을 제시하고 사용 하기 전에 모든 것을 구분하기위한 테스트를 설계 해야합니다. 그렇지 않으면 혼란스러워지고 모델이 특별한 경우가 될 때까지 후속 결과를 설명하기 위해 최소한의 변화로 모델을 조정합니다.
wizzwizz4
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.