What do the dots in this tr command do: tr …A-Z A-ZA-Z <<< “JVPQBOV” (with 13 dots) Unicorn Meta Zoo #1: Why another podcast? Announcing the arrival of Valued Associate #679: Cesar Manara 2019 Community Moderator Election Results Why I closed the “Why is Kali so hard” questionwhat is the benefit of --squeeze-repeats in tr commandWhy can't tr read from /dev/urandom on OSX?broken pipe error with popen and JS ffiIs the historical Unix V5 tr command padding behavior of set2 different from what we consider today “classic” System V (1983-1988) behavior?Heirloom Toolchest tr: error(s) trying to delete the complement of a set containing a multibyte character?how to substitute minus sign with trPulling IP address from ping command with sed?Why does tr -sc 'A-Za-z' '[12*]' includes empty line?I cannot understand what -c parameter does in tr command in Ubuntu GNU/Linux even though I read the manualStrange behaviour of tr using ranges

What is the best way to deal with NPC-NPC combat?

Could moose/elk survive in the Amazon forest?

Protagonist's race is hidden - should I reveal it?

What does a straight horizontal line above a few notes, after a changed tempo mean?

How to find the stem of any word?

A Paper Record is What I Hamper

How do I check if a string is entirely made of the same substring?

Scheduling based problem

Does Mathematica have an implementation of the Poisson binomial distribution?

What *exactly* is electrical current, voltage, and resistance?

What to do with someone that cheated their way through university and a PhD program?

How much cash can I safely carry into the USA and avoid civil forfeiture?

"Rubric" as meaning "signature" or "personal mark" -- is this accepted usage?

Raising a bilingual kid. When should we introduce the majority language?

What is purpose of DB Browser(dbbrowser.aspx) under admin tool?

Mistake in years of experience in resume?

Is Diceware more secure than a long passphrase?

How can I close the quickfix window and go back to the file I was editing

Multiple options vs single option UI

Why doesn't the standard consider a template constructor as a copy constructor?

Is it possible to cast 2x Final Payment while sacrificing just one creature?

Has a Nobel Peace laureate ever been accused of war crimes?

All ASCII characters with a given bit count

How do I reattach a shelf to the wall when it ripped out of the wall?



What do the dots in this tr command do: tr …A-Z A-ZA-Z



Unicorn Meta Zoo #1: Why another podcast?
Announcing the arrival of Valued Associate #679: Cesar Manara
2019 Community Moderator Election Results
Why I closed the “Why is Kali so hard” questionwhat is the benefit of --squeeze-repeats in tr commandWhy can't tr read from /dev/urandom on OSX?broken pipe error with popen and JS ffiIs the historical Unix V5 tr command padding behavior of set2 different from what we consider today “classic” System V (1983-1988) behavior?Heirloom Toolchest tr: error(s) trying to delete the complement of a set containing a multibyte character?how to substitute minus sign with trPulling IP address from ping command with sed?Why does tr -sc 'A-Za-z' '[12*]' includes empty line?I cannot understand what -c parameter does in tr command in Ubuntu GNU/Linux even though I read the manualStrange behaviour of tr using ranges



.everyoneloves__top-leaderboard:empty,.everyoneloves__mid-leaderboard:empty,.everyoneloves__bot-mid-leaderboard:empty margin-bottom:0;








18















I want to use tr to do some rot13 transformation. I can beautifully understand this command:



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


which output is HELP ME PLEASE, but I can't figure out how this other command can produce the same rot13 transformation:



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


So I have two questions:



  1. What's the magic behind the second tr command?

  2. How to make the second command work for both lower and upper case, just like the first command?









share|improve this question
























  • I know there's 13 dots. What I wanna know is how it works. There's no explanation about dots in the manual

    – Frederico Oliveira
    Apr 6 at 3:19






  • 4





    you had better hope you don't run into a dot in your input text

    – iruvar
    Apr 6 at 3:43






  • 1





    FWIW the shorter form tr [.*13].A-Z A-ZA-Z works just as well as tr .............A-Z A-ZA-Z

    – iruvar
    Apr 7 at 14:12

















18















I want to use tr to do some rot13 transformation. I can beautifully understand this command:



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


which output is HELP ME PLEASE, but I can't figure out how this other command can produce the same rot13 transformation:



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


So I have two questions:



  1. What's the magic behind the second tr command?

  2. How to make the second command work for both lower and upper case, just like the first command?









share|improve this question
























  • I know there's 13 dots. What I wanna know is how it works. There's no explanation about dots in the manual

    – Frederico Oliveira
    Apr 6 at 3:19






  • 4





    you had better hope you don't run into a dot in your input text

    – iruvar
    Apr 6 at 3:43






  • 1





    FWIW the shorter form tr [.*13].A-Z A-ZA-Z works just as well as tr .............A-Z A-ZA-Z

    – iruvar
    Apr 7 at 14:12













18












18








18


1






I want to use tr to do some rot13 transformation. I can beautifully understand this command:



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


which output is HELP ME PLEASE, but I can't figure out how this other command can produce the same rot13 transformation:



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


So I have two questions:



  1. What's the magic behind the second tr command?

  2. How to make the second command work for both lower and upper case, just like the first command?









share|improve this question
















I want to use tr to do some rot13 transformation. I can beautifully understand this command:



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


which output is HELP ME PLEASE, but I can't figure out how this other command can produce the same rot13 transformation:



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


So I have two questions:



  1. What's the magic behind the second tr command?

  2. How to make the second command work for both lower and upper case, just like the first command?






tr






share|improve this question















share|improve this question













share|improve this question




share|improve this question








edited Apr 6 at 3:22









Michael Homer

51.5k8142180




51.5k8142180










asked Apr 6 at 3:12









Frederico OliveiraFrederico Oliveira

1176




1176












  • I know there's 13 dots. What I wanna know is how it works. There's no explanation about dots in the manual

    – Frederico Oliveira
    Apr 6 at 3:19






  • 4





    you had better hope you don't run into a dot in your input text

    – iruvar
    Apr 6 at 3:43






  • 1





    FWIW the shorter form tr [.*13].A-Z A-ZA-Z works just as well as tr .............A-Z A-ZA-Z

    – iruvar
    Apr 7 at 14:12

















  • I know there's 13 dots. What I wanna know is how it works. There's no explanation about dots in the manual

    – Frederico Oliveira
    Apr 6 at 3:19






  • 4





    you had better hope you don't run into a dot in your input text

    – iruvar
    Apr 6 at 3:43






  • 1





    FWIW the shorter form tr [.*13].A-Z A-ZA-Z works just as well as tr .............A-Z A-ZA-Z

    – iruvar
    Apr 7 at 14:12
















I know there's 13 dots. What I wanna know is how it works. There's no explanation about dots in the manual

– Frederico Oliveira
Apr 6 at 3:19





I know there's 13 dots. What I wanna know is how it works. There's no explanation about dots in the manual

– Frederico Oliveira
Apr 6 at 3:19




4




4





you had better hope you don't run into a dot in your input text

– iruvar
Apr 6 at 3:43





you had better hope you don't run into a dot in your input text

– iruvar
Apr 6 at 3:43




1




1





FWIW the shorter form tr [.*13].A-Z A-ZA-Z works just as well as tr .............A-Z A-ZA-Z

– iruvar
Apr 7 at 14:12





FWIW the shorter form tr [.*13].A-Z A-ZA-Z works just as well as tr .............A-Z A-ZA-Z

– iruvar
Apr 7 at 14:12










3 Answers
3






active

oldest

votes


















17














It works as follows:



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


So tr will translate SET1 to SET2.



This is equivalent to first one because it is also shifting by 13 units as there 13 dots.



To include the lower case letters, you'll have to arrange them in SET1 with a similar offset, i.e.:



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

ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyzabcdefghijklm


That's 26 dots between Z and a, spanning half the upper-case and half the lower-case alphabet. So the tr command itself will be:



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





share|improve this answer
































    14














    As @Prvt_Yadv says in their answer, it works because there are 13 dots.



    The sets are



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


    The dot isn't a special character, so if you have a dot in your input, it will be translated too. In the version of tr that I have, it is the last corresponding character in the second set, in this case an M:



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


    (I could imagine that a different version of tr might use the first matching character in set 2, which would give an A.)



    To answer your second question, you need another 13 dots in the first set to "use up" the remaining uppercase letters in set 2:



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


    then you can repeat the pattern:



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


    which gives us:



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


    And so:



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


    Personally, I think the first way of doing it in your question is simpler!



    The first way also doesn't transform any other characters in the input. For example, compare:



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


    with



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





    share|improve this answer
































      1














      Ok, so thanks to @Prvt_Yadv I was able to understand the dots. Here's the first question answer:




      What's the magic behind the second tr command?




      The 13 dots are simply being mapped to the first 13 letters from the second set. So



      tr .............A-Z A-ZA-Z will produce the following sets:



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


      If your input doesn't contain a dot, you can discard the initial sequence, since you won't use those substitution. Then the sets would become:



      SET1 -> ABCDEFGHIJKLMNOPQRSTUVXWYZ
      SET2 -> NOPQRSTUVXWYZABCDEFGHIJKLMNOPQRSTUVXWYZ


      But since the first set already contains all 26 letters and set2 has repeating trailing letter, those are discarded too, finally becoming



      SET1 -> ABCDEFGHIJKLMNOPQRSTUVXWYZ
      SET2 -> NOPQRSTUVXWYZABCDEFGHIJKLM


      Which is the rot13 substitution and identical to the first command (except for not dealing with lower cases here). The same logic can be applied for the title of the question:



      tr ...A-Z A-ZA-Z <<< “JVPQBOV” would produce the sets:



      SET1 -> ...ABCDEFGHIJKLMNOPQRSTUVXWYZ
      SET2 -> ABCDEFGHIJKLMNOPQRSTUVXWYZABCDEFGHIJKLMNOPQRSTUVXWYZ


      Discarding the initial sequence and the trailing repeating letters they become:



      SET1 -> ABCDEFGHIJKLMNOPQRSTUVXWYZ
      SET2 -> DEFGHIJKLMNOPQRSTUVXWYZABC


      Which is the rot3 substitution.



      Now for the second question:




      How to make the second command work for both lower and upper case, just like the first command?




      To make it work you put the desired number of dots at the beginning, matching your rot and 26 dots between to upper sequence and the lower sequence, just like this:



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


      This would successfully create an insensitive rot8. To visualize why this works let's see the sets:



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


      Excluding the dots mapping and trailing letters:



      SET1 -> ABCDEFGHIJKLMNOPQRSTUVXWYZabcdefghijklmnopqrstuvxwyz
      SET2 -> IJKLMNOPQRSTUVXWYZABCDEFGHijklmnopqrstuvxwyzabcdefgh


      Now it works for both upper and lower case :)



      Another way to make it works is to use two tr commands as follow:



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


      A caveat to using the dots substitution was gave by @iruvar: this command will not work as expected when the input string has dots. This is because the dots are being mapped to other letters and when doing the substitution, tr will change the input dot to the last mapped letter. But you can actually use any other character than dots. So, if using dots in your tr command is a problem, you can use @ instead, for example. This would work just as fine:



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





      share|improve this answer




















      • 3





        I'm not sure how you concluded that "dots are replaced by a sequence of letters starting from a to the number of dots"; that's not at all the case. There's no magic involved; as Prvt_Yadv explained, there are two sets and tr is mapping from set 1 to set 2, as always, but in this case you've mapped the character . to A, and also B, and also ..., and also M. This doesn't matter since your input doesn't contain a ., but if it did it would turn into an M (tr uses the last output you specify for a given input)

        – Michael Mrozek
        Apr 6 at 6:33











      • Thanks for the clarification. I've updated the answer to fix my mistakes :)

        – Frederico Oliveira
        Apr 6 at 7:35






      • 1





        I admire your (initial) attempts to use science to determine the behaviour of this program, but in future you should come up with as many different hypotheses as possible and design tests to distinguish between all of them before trying to use them. Otherwise you end up getting confused, and adapting your model in a least-changes manner to explain subsequent results until your model's just a mass of special-cases.

        – wizzwizz4
        Apr 6 at 18:46











      Your Answer








      StackExchange.ready(function()
      var channelOptions =
      tags: "".split(" "),
      id: "106"
      ;
      initTagRenderer("".split(" "), "".split(" "), channelOptions);

      StackExchange.using("externalEditor", function()
      // Have to fire editor after snippets, if snippets enabled
      if (StackExchange.settings.snippets.snippetsEnabled)
      StackExchange.using("snippets", function()
      createEditor();
      );

      else
      createEditor();

      );

      function createEditor()
      StackExchange.prepareEditor(
      heartbeatType: 'answer',
      autoActivateHeartbeat: false,
      convertImagesToLinks: false,
      noModals: true,
      showLowRepImageUploadWarning: true,
      reputationToPostImages: null,
      bindNavPrevention: true,
      postfix: "",
      imageUploader:
      brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
      contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
      allowUrls: true
      ,
      onDemand: true,
      discardSelector: ".discard-answer"
      ,immediatelyShowMarkdownHelp:true
      );



      );













      draft saved

      draft discarded


















      StackExchange.ready(
      function ()
      StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2funix.stackexchange.com%2fquestions%2f510838%2fwhat-do-the-dots-in-this-tr-command-do-tr-a-z-a-za-z-jvpqbov%23new-answer', 'question_page');

      );

      Post as a guest















      Required, but never shown

























      3 Answers
      3






      active

      oldest

      votes








      3 Answers
      3






      active

      oldest

      votes









      active

      oldest

      votes






      active

      oldest

      votes









      17














      It works as follows:



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


      So tr will translate SET1 to SET2.



      This is equivalent to first one because it is also shifting by 13 units as there 13 dots.



      To include the lower case letters, you'll have to arrange them in SET1 with a similar offset, i.e.:



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

      ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyzabcdefghijklm


      That's 26 dots between Z and a, spanning half the upper-case and half the lower-case alphabet. So the tr command itself will be:



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





      share|improve this answer





























        17














        It works as follows:



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


        So tr will translate SET1 to SET2.



        This is equivalent to first one because it is also shifting by 13 units as there 13 dots.



        To include the lower case letters, you'll have to arrange them in SET1 with a similar offset, i.e.:



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

        ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyzabcdefghijklm


        That's 26 dots between Z and a, spanning half the upper-case and half the lower-case alphabet. So the tr command itself will be:



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





        share|improve this answer



























          17












          17








          17







          It works as follows:



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


          So tr will translate SET1 to SET2.



          This is equivalent to first one because it is also shifting by 13 units as there 13 dots.



          To include the lower case letters, you'll have to arrange them in SET1 with a similar offset, i.e.:



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

          ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyzabcdefghijklm


          That's 26 dots between Z and a, spanning half the upper-case and half the lower-case alphabet. So the tr command itself will be:



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





          share|improve this answer















          It works as follows:



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


          So tr will translate SET1 to SET2.



          This is equivalent to first one because it is also shifting by 13 units as there 13 dots.



          To include the lower case letters, you'll have to arrange them in SET1 with a similar offset, i.e.:



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

          ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyzabcdefghijklm


          That's 26 dots between Z and a, spanning half the upper-case and half the lower-case alphabet. So the tr command itself will be:



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






          share|improve this answer














          share|improve this answer



          share|improve this answer








          edited Apr 6 at 9:39









          ilkkachu

          63.6k10104182




          63.6k10104182










          answered Apr 6 at 3:27









          Prvt_YadvPrvt_Yadv

          3,35631531




          3,35631531























              14














              As @Prvt_Yadv says in their answer, it works because there are 13 dots.



              The sets are



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


              The dot isn't a special character, so if you have a dot in your input, it will be translated too. In the version of tr that I have, it is the last corresponding character in the second set, in this case an M:



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


              (I could imagine that a different version of tr might use the first matching character in set 2, which would give an A.)



              To answer your second question, you need another 13 dots in the first set to "use up" the remaining uppercase letters in set 2:



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


              then you can repeat the pattern:



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


              which gives us:



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


              And so:



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


              Personally, I think the first way of doing it in your question is simpler!



              The first way also doesn't transform any other characters in the input. For example, compare:



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


              with



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





              share|improve this answer





























                14














                As @Prvt_Yadv says in their answer, it works because there are 13 dots.



                The sets are



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


                The dot isn't a special character, so if you have a dot in your input, it will be translated too. In the version of tr that I have, it is the last corresponding character in the second set, in this case an M:



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


                (I could imagine that a different version of tr might use the first matching character in set 2, which would give an A.)



                To answer your second question, you need another 13 dots in the first set to "use up" the remaining uppercase letters in set 2:



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


                then you can repeat the pattern:



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


                which gives us:



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


                And so:



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


                Personally, I think the first way of doing it in your question is simpler!



                The first way also doesn't transform any other characters in the input. For example, compare:



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


                with



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





                share|improve this answer



























                  14












                  14








                  14







                  As @Prvt_Yadv says in their answer, it works because there are 13 dots.



                  The sets are



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


                  The dot isn't a special character, so if you have a dot in your input, it will be translated too. In the version of tr that I have, it is the last corresponding character in the second set, in this case an M:



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


                  (I could imagine that a different version of tr might use the first matching character in set 2, which would give an A.)



                  To answer your second question, you need another 13 dots in the first set to "use up" the remaining uppercase letters in set 2:



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


                  then you can repeat the pattern:



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


                  which gives us:



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


                  And so:



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


                  Personally, I think the first way of doing it in your question is simpler!



                  The first way also doesn't transform any other characters in the input. For example, compare:



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


                  with



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





                  share|improve this answer















                  As @Prvt_Yadv says in their answer, it works because there are 13 dots.



                  The sets are



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


                  The dot isn't a special character, so if you have a dot in your input, it will be translated too. In the version of tr that I have, it is the last corresponding character in the second set, in this case an M:



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


                  (I could imagine that a different version of tr might use the first matching character in set 2, which would give an A.)



                  To answer your second question, you need another 13 dots in the first set to "use up" the remaining uppercase letters in set 2:



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


                  then you can repeat the pattern:



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


                  which gives us:



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


                  And so:



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


                  Personally, I think the first way of doing it in your question is simpler!



                  The first way also doesn't transform any other characters in the input. For example, compare:



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


                  with



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






                  share|improve this answer














                  share|improve this answer



                  share|improve this answer








                  edited Apr 6 at 10:33

























                  answered Apr 6 at 6:39









                  user7761803user7761803

                  1413




                  1413





















                      1














                      Ok, so thanks to @Prvt_Yadv I was able to understand the dots. Here's the first question answer:




                      What's the magic behind the second tr command?




                      The 13 dots are simply being mapped to the first 13 letters from the second set. So



                      tr .............A-Z A-ZA-Z will produce the following sets:



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


                      If your input doesn't contain a dot, you can discard the initial sequence, since you won't use those substitution. Then the sets would become:



                      SET1 -> ABCDEFGHIJKLMNOPQRSTUVXWYZ
                      SET2 -> NOPQRSTUVXWYZABCDEFGHIJKLMNOPQRSTUVXWYZ


                      But since the first set already contains all 26 letters and set2 has repeating trailing letter, those are discarded too, finally becoming



                      SET1 -> ABCDEFGHIJKLMNOPQRSTUVXWYZ
                      SET2 -> NOPQRSTUVXWYZABCDEFGHIJKLM


                      Which is the rot13 substitution and identical to the first command (except for not dealing with lower cases here). The same logic can be applied for the title of the question:



                      tr ...A-Z A-ZA-Z <<< “JVPQBOV” would produce the sets:



                      SET1 -> ...ABCDEFGHIJKLMNOPQRSTUVXWYZ
                      SET2 -> ABCDEFGHIJKLMNOPQRSTUVXWYZABCDEFGHIJKLMNOPQRSTUVXWYZ


                      Discarding the initial sequence and the trailing repeating letters they become:



                      SET1 -> ABCDEFGHIJKLMNOPQRSTUVXWYZ
                      SET2 -> DEFGHIJKLMNOPQRSTUVXWYZABC


                      Which is the rot3 substitution.



                      Now for the second question:




                      How to make the second command work for both lower and upper case, just like the first command?




                      To make it work you put the desired number of dots at the beginning, matching your rot and 26 dots between to upper sequence and the lower sequence, just like this:



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


                      This would successfully create an insensitive rot8. To visualize why this works let's see the sets:



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


                      Excluding the dots mapping and trailing letters:



                      SET1 -> ABCDEFGHIJKLMNOPQRSTUVXWYZabcdefghijklmnopqrstuvxwyz
                      SET2 -> IJKLMNOPQRSTUVXWYZABCDEFGHijklmnopqrstuvxwyzabcdefgh


                      Now it works for both upper and lower case :)



                      Another way to make it works is to use two tr commands as follow:



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


                      A caveat to using the dots substitution was gave by @iruvar: this command will not work as expected when the input string has dots. This is because the dots are being mapped to other letters and when doing the substitution, tr will change the input dot to the last mapped letter. But you can actually use any other character than dots. So, if using dots in your tr command is a problem, you can use @ instead, for example. This would work just as fine:



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





                      share|improve this answer




















                      • 3





                        I'm not sure how you concluded that "dots are replaced by a sequence of letters starting from a to the number of dots"; that's not at all the case. There's no magic involved; as Prvt_Yadv explained, there are two sets and tr is mapping from set 1 to set 2, as always, but in this case you've mapped the character . to A, and also B, and also ..., and also M. This doesn't matter since your input doesn't contain a ., but if it did it would turn into an M (tr uses the last output you specify for a given input)

                        – Michael Mrozek
                        Apr 6 at 6:33











                      • Thanks for the clarification. I've updated the answer to fix my mistakes :)

                        – Frederico Oliveira
                        Apr 6 at 7:35






                      • 1





                        I admire your (initial) attempts to use science to determine the behaviour of this program, but in future you should come up with as many different hypotheses as possible and design tests to distinguish between all of them before trying to use them. Otherwise you end up getting confused, and adapting your model in a least-changes manner to explain subsequent results until your model's just a mass of special-cases.

                        – wizzwizz4
                        Apr 6 at 18:46















                      1














                      Ok, so thanks to @Prvt_Yadv I was able to understand the dots. Here's the first question answer:




                      What's the magic behind the second tr command?




                      The 13 dots are simply being mapped to the first 13 letters from the second set. So



                      tr .............A-Z A-ZA-Z will produce the following sets:



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


                      If your input doesn't contain a dot, you can discard the initial sequence, since you won't use those substitution. Then the sets would become:



                      SET1 -> ABCDEFGHIJKLMNOPQRSTUVXWYZ
                      SET2 -> NOPQRSTUVXWYZABCDEFGHIJKLMNOPQRSTUVXWYZ


                      But since the first set already contains all 26 letters and set2 has repeating trailing letter, those are discarded too, finally becoming



                      SET1 -> ABCDEFGHIJKLMNOPQRSTUVXWYZ
                      SET2 -> NOPQRSTUVXWYZABCDEFGHIJKLM


                      Which is the rot13 substitution and identical to the first command (except for not dealing with lower cases here). The same logic can be applied for the title of the question:



                      tr ...A-Z A-ZA-Z <<< “JVPQBOV” would produce the sets:



                      SET1 -> ...ABCDEFGHIJKLMNOPQRSTUVXWYZ
                      SET2 -> ABCDEFGHIJKLMNOPQRSTUVXWYZABCDEFGHIJKLMNOPQRSTUVXWYZ


                      Discarding the initial sequence and the trailing repeating letters they become:



                      SET1 -> ABCDEFGHIJKLMNOPQRSTUVXWYZ
                      SET2 -> DEFGHIJKLMNOPQRSTUVXWYZABC


                      Which is the rot3 substitution.



                      Now for the second question:




                      How to make the second command work for both lower and upper case, just like the first command?




                      To make it work you put the desired number of dots at the beginning, matching your rot and 26 dots between to upper sequence and the lower sequence, just like this:



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


                      This would successfully create an insensitive rot8. To visualize why this works let's see the sets:



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


                      Excluding the dots mapping and trailing letters:



                      SET1 -> ABCDEFGHIJKLMNOPQRSTUVXWYZabcdefghijklmnopqrstuvxwyz
                      SET2 -> IJKLMNOPQRSTUVXWYZABCDEFGHijklmnopqrstuvxwyzabcdefgh


                      Now it works for both upper and lower case :)



                      Another way to make it works is to use two tr commands as follow:



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


                      A caveat to using the dots substitution was gave by @iruvar: this command will not work as expected when the input string has dots. This is because the dots are being mapped to other letters and when doing the substitution, tr will change the input dot to the last mapped letter. But you can actually use any other character than dots. So, if using dots in your tr command is a problem, you can use @ instead, for example. This would work just as fine:



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





                      share|improve this answer




















                      • 3





                        I'm not sure how you concluded that "dots are replaced by a sequence of letters starting from a to the number of dots"; that's not at all the case. There's no magic involved; as Prvt_Yadv explained, there are two sets and tr is mapping from set 1 to set 2, as always, but in this case you've mapped the character . to A, and also B, and also ..., and also M. This doesn't matter since your input doesn't contain a ., but if it did it would turn into an M (tr uses the last output you specify for a given input)

                        – Michael Mrozek
                        Apr 6 at 6:33











                      • Thanks for the clarification. I've updated the answer to fix my mistakes :)

                        – Frederico Oliveira
                        Apr 6 at 7:35






                      • 1





                        I admire your (initial) attempts to use science to determine the behaviour of this program, but in future you should come up with as many different hypotheses as possible and design tests to distinguish between all of them before trying to use them. Otherwise you end up getting confused, and adapting your model in a least-changes manner to explain subsequent results until your model's just a mass of special-cases.

                        – wizzwizz4
                        Apr 6 at 18:46













                      1












                      1








                      1







                      Ok, so thanks to @Prvt_Yadv I was able to understand the dots. Here's the first question answer:




                      What's the magic behind the second tr command?




                      The 13 dots are simply being mapped to the first 13 letters from the second set. So



                      tr .............A-Z A-ZA-Z will produce the following sets:



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


                      If your input doesn't contain a dot, you can discard the initial sequence, since you won't use those substitution. Then the sets would become:



                      SET1 -> ABCDEFGHIJKLMNOPQRSTUVXWYZ
                      SET2 -> NOPQRSTUVXWYZABCDEFGHIJKLMNOPQRSTUVXWYZ


                      But since the first set already contains all 26 letters and set2 has repeating trailing letter, those are discarded too, finally becoming



                      SET1 -> ABCDEFGHIJKLMNOPQRSTUVXWYZ
                      SET2 -> NOPQRSTUVXWYZABCDEFGHIJKLM


                      Which is the rot13 substitution and identical to the first command (except for not dealing with lower cases here). The same logic can be applied for the title of the question:



                      tr ...A-Z A-ZA-Z <<< “JVPQBOV” would produce the sets:



                      SET1 -> ...ABCDEFGHIJKLMNOPQRSTUVXWYZ
                      SET2 -> ABCDEFGHIJKLMNOPQRSTUVXWYZABCDEFGHIJKLMNOPQRSTUVXWYZ


                      Discarding the initial sequence and the trailing repeating letters they become:



                      SET1 -> ABCDEFGHIJKLMNOPQRSTUVXWYZ
                      SET2 -> DEFGHIJKLMNOPQRSTUVXWYZABC


                      Which is the rot3 substitution.



                      Now for the second question:




                      How to make the second command work for both lower and upper case, just like the first command?




                      To make it work you put the desired number of dots at the beginning, matching your rot and 26 dots between to upper sequence and the lower sequence, just like this:



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


                      This would successfully create an insensitive rot8. To visualize why this works let's see the sets:



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


                      Excluding the dots mapping and trailing letters:



                      SET1 -> ABCDEFGHIJKLMNOPQRSTUVXWYZabcdefghijklmnopqrstuvxwyz
                      SET2 -> IJKLMNOPQRSTUVXWYZABCDEFGHijklmnopqrstuvxwyzabcdefgh


                      Now it works for both upper and lower case :)



                      Another way to make it works is to use two tr commands as follow:



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


                      A caveat to using the dots substitution was gave by @iruvar: this command will not work as expected when the input string has dots. This is because the dots are being mapped to other letters and when doing the substitution, tr will change the input dot to the last mapped letter. But you can actually use any other character than dots. So, if using dots in your tr command is a problem, you can use @ instead, for example. This would work just as fine:



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





                      share|improve this answer















                      Ok, so thanks to @Prvt_Yadv I was able to understand the dots. Here's the first question answer:




                      What's the magic behind the second tr command?




                      The 13 dots are simply being mapped to the first 13 letters from the second set. So



                      tr .............A-Z A-ZA-Z will produce the following sets:



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


                      If your input doesn't contain a dot, you can discard the initial sequence, since you won't use those substitution. Then the sets would become:



                      SET1 -> ABCDEFGHIJKLMNOPQRSTUVXWYZ
                      SET2 -> NOPQRSTUVXWYZABCDEFGHIJKLMNOPQRSTUVXWYZ


                      But since the first set already contains all 26 letters and set2 has repeating trailing letter, those are discarded too, finally becoming



                      SET1 -> ABCDEFGHIJKLMNOPQRSTUVXWYZ
                      SET2 -> NOPQRSTUVXWYZABCDEFGHIJKLM


                      Which is the rot13 substitution and identical to the first command (except for not dealing with lower cases here). The same logic can be applied for the title of the question:



                      tr ...A-Z A-ZA-Z <<< “JVPQBOV” would produce the sets:



                      SET1 -> ...ABCDEFGHIJKLMNOPQRSTUVXWYZ
                      SET2 -> ABCDEFGHIJKLMNOPQRSTUVXWYZABCDEFGHIJKLMNOPQRSTUVXWYZ


                      Discarding the initial sequence and the trailing repeating letters they become:



                      SET1 -> ABCDEFGHIJKLMNOPQRSTUVXWYZ
                      SET2 -> DEFGHIJKLMNOPQRSTUVXWYZABC


                      Which is the rot3 substitution.



                      Now for the second question:




                      How to make the second command work for both lower and upper case, just like the first command?




                      To make it work you put the desired number of dots at the beginning, matching your rot and 26 dots between to upper sequence and the lower sequence, just like this:



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


                      This would successfully create an insensitive rot8. To visualize why this works let's see the sets:



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


                      Excluding the dots mapping and trailing letters:



                      SET1 -> ABCDEFGHIJKLMNOPQRSTUVXWYZabcdefghijklmnopqrstuvxwyz
                      SET2 -> IJKLMNOPQRSTUVXWYZABCDEFGHijklmnopqrstuvxwyzabcdefgh


                      Now it works for both upper and lower case :)



                      Another way to make it works is to use two tr commands as follow:



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


                      A caveat to using the dots substitution was gave by @iruvar: this command will not work as expected when the input string has dots. This is because the dots are being mapped to other letters and when doing the substitution, tr will change the input dot to the last mapped letter. But you can actually use any other character than dots. So, if using dots in your tr command is a problem, you can use @ instead, for example. This would work just as fine:



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






                      share|improve this answer














                      share|improve this answer



                      share|improve this answer








                      edited Apr 6 at 7:40

























                      answered Apr 6 at 4:49









                      Frederico OliveiraFrederico Oliveira

                      1176




                      1176







                      • 3





                        I'm not sure how you concluded that "dots are replaced by a sequence of letters starting from a to the number of dots"; that's not at all the case. There's no magic involved; as Prvt_Yadv explained, there are two sets and tr is mapping from set 1 to set 2, as always, but in this case you've mapped the character . to A, and also B, and also ..., and also M. This doesn't matter since your input doesn't contain a ., but if it did it would turn into an M (tr uses the last output you specify for a given input)

                        – Michael Mrozek
                        Apr 6 at 6:33











                      • Thanks for the clarification. I've updated the answer to fix my mistakes :)

                        – Frederico Oliveira
                        Apr 6 at 7:35






                      • 1





                        I admire your (initial) attempts to use science to determine the behaviour of this program, but in future you should come up with as many different hypotheses as possible and design tests to distinguish between all of them before trying to use them. Otherwise you end up getting confused, and adapting your model in a least-changes manner to explain subsequent results until your model's just a mass of special-cases.

                        – wizzwizz4
                        Apr 6 at 18:46












                      • 3





                        I'm not sure how you concluded that "dots are replaced by a sequence of letters starting from a to the number of dots"; that's not at all the case. There's no magic involved; as Prvt_Yadv explained, there are two sets and tr is mapping from set 1 to set 2, as always, but in this case you've mapped the character . to A, and also B, and also ..., and also M. This doesn't matter since your input doesn't contain a ., but if it did it would turn into an M (tr uses the last output you specify for a given input)

                        – Michael Mrozek
                        Apr 6 at 6:33











                      • Thanks for the clarification. I've updated the answer to fix my mistakes :)

                        – Frederico Oliveira
                        Apr 6 at 7:35






                      • 1





                        I admire your (initial) attempts to use science to determine the behaviour of this program, but in future you should come up with as many different hypotheses as possible and design tests to distinguish between all of them before trying to use them. Otherwise you end up getting confused, and adapting your model in a least-changes manner to explain subsequent results until your model's just a mass of special-cases.

                        – wizzwizz4
                        Apr 6 at 18:46







                      3




                      3





                      I'm not sure how you concluded that "dots are replaced by a sequence of letters starting from a to the number of dots"; that's not at all the case. There's no magic involved; as Prvt_Yadv explained, there are two sets and tr is mapping from set 1 to set 2, as always, but in this case you've mapped the character . to A, and also B, and also ..., and also M. This doesn't matter since your input doesn't contain a ., but if it did it would turn into an M (tr uses the last output you specify for a given input)

                      – Michael Mrozek
                      Apr 6 at 6:33





                      I'm not sure how you concluded that "dots are replaced by a sequence of letters starting from a to the number of dots"; that's not at all the case. There's no magic involved; as Prvt_Yadv explained, there are two sets and tr is mapping from set 1 to set 2, as always, but in this case you've mapped the character . to A, and also B, and also ..., and also M. This doesn't matter since your input doesn't contain a ., but if it did it would turn into an M (tr uses the last output you specify for a given input)

                      – Michael Mrozek
                      Apr 6 at 6:33













                      Thanks for the clarification. I've updated the answer to fix my mistakes :)

                      – Frederico Oliveira
                      Apr 6 at 7:35





                      Thanks for the clarification. I've updated the answer to fix my mistakes :)

                      – Frederico Oliveira
                      Apr 6 at 7:35




                      1




                      1





                      I admire your (initial) attempts to use science to determine the behaviour of this program, but in future you should come up with as many different hypotheses as possible and design tests to distinguish between all of them before trying to use them. Otherwise you end up getting confused, and adapting your model in a least-changes manner to explain subsequent results until your model's just a mass of special-cases.

                      – wizzwizz4
                      Apr 6 at 18:46





                      I admire your (initial) attempts to use science to determine the behaviour of this program, but in future you should come up with as many different hypotheses as possible and design tests to distinguish between all of them before trying to use them. Otherwise you end up getting confused, and adapting your model in a least-changes manner to explain subsequent results until your model's just a mass of special-cases.

                      – wizzwizz4
                      Apr 6 at 18:46

















                      draft saved

                      draft discarded
















































                      Thanks for contributing an answer to Unix & Linux Stack Exchange!


                      • Please be sure to answer the question. Provide details and share your research!

                      But avoid


                      • Asking for help, clarification, or responding to other answers.

                      • Making statements based on opinion; back them up with references or personal experience.

                      To learn more, see our tips on writing great answers.




                      draft saved


                      draft discarded














                      StackExchange.ready(
                      function ()
                      StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2funix.stackexchange.com%2fquestions%2f510838%2fwhat-do-the-dots-in-this-tr-command-do-tr-a-z-a-za-z-jvpqbov%23new-answer', 'question_page');

                      );

                      Post as a guest















                      Required, but never shown





















































                      Required, but never shown














                      Required, but never shown












                      Required, but never shown







                      Required, but never shown

































                      Required, but never shown














                      Required, but never shown












                      Required, but never shown







                      Required, but never shown







                      Popular posts from this blog

                      Adding axes to figuresAdding axes labels to LaTeX figuresLaTeX equivalent of ConTeXt buffersRotate a node but not its content: the case of the ellipse decorationHow to define the default vertical distance between nodes?TikZ scaling graphic and adjust node position and keep font sizeNumerical conditional within tikz keys?adding axes to shapesAlign axes across subfiguresAdding figures with a certain orderLine up nested tikz enviroments or how to get rid of themAdding axes labels to LaTeX figures

                      Luettelo Yhdysvaltain laivaston lentotukialuksista Lähteet | Navigointivalikko

                      Gary (muusikko) Sisällysluettelo Historia | Rockin' High | Lähteet | Aiheesta muualla | NavigointivalikkoInfobox OKTuomas "Gary" Keskinen Ancaran kitaristiksiProjekti Rockin' High