Replacing 3 or more digits with equivalent number of *

The name of the pictureThe name of the pictureThe name of the pictureClash Royale CLAN TAG#URR8PPP





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








3















I want to replace any 3 or more digit string in a text file with equivalent number of *.For example: abc-1234-45 --> abc-****-45



echo "abc-1234-45" | sed 's/[0-9]3,/*/'


I tried this but it only replaces it with one *.










share|improve this question






























    3















    I want to replace any 3 or more digit string in a text file with equivalent number of *.For example: abc-1234-45 --> abc-****-45



    echo "abc-1234-45" | sed 's/[0-9]3,/*/'


    I tried this but it only replaces it with one *.










    share|improve this question


























      3












      3








      3








      I want to replace any 3 or more digit string in a text file with equivalent number of *.For example: abc-1234-45 --> abc-****-45



      echo "abc-1234-45" | sed 's/[0-9]3,/*/'


      I tried this but it only replaces it with one *.










      share|improve this question
















      I want to replace any 3 or more digit string in a text file with equivalent number of *.For example: abc-1234-45 --> abc-****-45



      echo "abc-1234-45" | sed 's/[0-9]3,/*/'


      I tried this but it only replaces it with one *.







      regular-expression






      share|improve this question















      share|improve this question













      share|improve this question




      share|improve this question








      edited Mar 9 at 13:24









      Rui F Ribeiro

      41.9k1483142




      41.9k1483142










      asked Apr 8 '14 at 17:35









      Raghavender KaviRaghavender Kavi

      162




      162




















          2 Answers
          2






          active

          oldest

          votes


















          3














          You can use perl:



          $ echo "abc-1234-45" | perl -pe 's/(d3,)/"*" x length($1)/eg'
          abc-****-45


          /e flag causes perl evaluate the right side as an expression before replacing.






          share|improve this answer

























          • Thank you. Is this not possible in sed or awk - I mean evaluating string as an expression before replacing?

            – user64746
            Apr 9 '14 at 5:58












          • @RaghavenderKavi AFAIK, sed and awk can't.

            – cuonglm
            Apr 9 '14 at 6:44



















          0














          GNU awk



          echo 'abc-1234-45' | 
          awk --re-interval -v RS='[[:digit:]]3,' 'gsub(/[[:digit:]]/, "*", RT);
          printf "%s%s", $0, RT'
          abc-****-45


          Or if you are willing to look at Python



          echo 'abc-1234-45' | python -c 'import re; import sys; print re.sub(r"d3,",
          lambda x: len(x.group())*"*", sys.stdin.readline().strip())'





          share|improve this answer

























            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%2f123773%2freplacing-3-or-more-digits-with-equivalent-number-of%23new-answer', 'question_page');

            );

            Post as a guest















            Required, but never shown

























            2 Answers
            2






            active

            oldest

            votes








            2 Answers
            2






            active

            oldest

            votes









            active

            oldest

            votes






            active

            oldest

            votes









            3














            You can use perl:



            $ echo "abc-1234-45" | perl -pe 's/(d3,)/"*" x length($1)/eg'
            abc-****-45


            /e flag causes perl evaluate the right side as an expression before replacing.






            share|improve this answer

























            • Thank you. Is this not possible in sed or awk - I mean evaluating string as an expression before replacing?

              – user64746
              Apr 9 '14 at 5:58












            • @RaghavenderKavi AFAIK, sed and awk can't.

              – cuonglm
              Apr 9 '14 at 6:44
















            3














            You can use perl:



            $ echo "abc-1234-45" | perl -pe 's/(d3,)/"*" x length($1)/eg'
            abc-****-45


            /e flag causes perl evaluate the right side as an expression before replacing.






            share|improve this answer

























            • Thank you. Is this not possible in sed or awk - I mean evaluating string as an expression before replacing?

              – user64746
              Apr 9 '14 at 5:58












            • @RaghavenderKavi AFAIK, sed and awk can't.

              – cuonglm
              Apr 9 '14 at 6:44














            3












            3








            3







            You can use perl:



            $ echo "abc-1234-45" | perl -pe 's/(d3,)/"*" x length($1)/eg'
            abc-****-45


            /e flag causes perl evaluate the right side as an expression before replacing.






            share|improve this answer















            You can use perl:



            $ echo "abc-1234-45" | perl -pe 's/(d3,)/"*" x length($1)/eg'
            abc-****-45


            /e flag causes perl evaluate the right side as an expression before replacing.







            share|improve this answer














            share|improve this answer



            share|improve this answer








            edited Apr 8 '14 at 17:51

























            answered Apr 8 '14 at 17:46









            cuonglmcuonglm

            106k25211308




            106k25211308












            • Thank you. Is this not possible in sed or awk - I mean evaluating string as an expression before replacing?

              – user64746
              Apr 9 '14 at 5:58












            • @RaghavenderKavi AFAIK, sed and awk can't.

              – cuonglm
              Apr 9 '14 at 6:44


















            • Thank you. Is this not possible in sed or awk - I mean evaluating string as an expression before replacing?

              – user64746
              Apr 9 '14 at 5:58












            • @RaghavenderKavi AFAIK, sed and awk can't.

              – cuonglm
              Apr 9 '14 at 6:44

















            Thank you. Is this not possible in sed or awk - I mean evaluating string as an expression before replacing?

            – user64746
            Apr 9 '14 at 5:58






            Thank you. Is this not possible in sed or awk - I mean evaluating string as an expression before replacing?

            – user64746
            Apr 9 '14 at 5:58














            @RaghavenderKavi AFAIK, sed and awk can't.

            – cuonglm
            Apr 9 '14 at 6:44






            @RaghavenderKavi AFAIK, sed and awk can't.

            – cuonglm
            Apr 9 '14 at 6:44














            0














            GNU awk



            echo 'abc-1234-45' | 
            awk --re-interval -v RS='[[:digit:]]3,' 'gsub(/[[:digit:]]/, "*", RT);
            printf "%s%s", $0, RT'
            abc-****-45


            Or if you are willing to look at Python



            echo 'abc-1234-45' | python -c 'import re; import sys; print re.sub(r"d3,",
            lambda x: len(x.group())*"*", sys.stdin.readline().strip())'





            share|improve this answer





























              0














              GNU awk



              echo 'abc-1234-45' | 
              awk --re-interval -v RS='[[:digit:]]3,' 'gsub(/[[:digit:]]/, "*", RT);
              printf "%s%s", $0, RT'
              abc-****-45


              Or if you are willing to look at Python



              echo 'abc-1234-45' | python -c 'import re; import sys; print re.sub(r"d3,",
              lambda x: len(x.group())*"*", sys.stdin.readline().strip())'





              share|improve this answer



























                0












                0








                0







                GNU awk



                echo 'abc-1234-45' | 
                awk --re-interval -v RS='[[:digit:]]3,' 'gsub(/[[:digit:]]/, "*", RT);
                printf "%s%s", $0, RT'
                abc-****-45


                Or if you are willing to look at Python



                echo 'abc-1234-45' | python -c 'import re; import sys; print re.sub(r"d3,",
                lambda x: len(x.group())*"*", sys.stdin.readline().strip())'





                share|improve this answer















                GNU awk



                echo 'abc-1234-45' | 
                awk --re-interval -v RS='[[:digit:]]3,' 'gsub(/[[:digit:]]/, "*", RT);
                printf "%s%s", $0, RT'
                abc-****-45


                Or if you are willing to look at Python



                echo 'abc-1234-45' | python -c 'import re; import sys; print re.sub(r"d3,",
                lambda x: len(x.group())*"*", sys.stdin.readline().strip())'






                share|improve this answer














                share|improve this answer



                share|improve this answer








                edited Apr 9 '14 at 12:30

























                answered Apr 9 '14 at 12:15









                iruvariruvar

                12.2k63062




                12.2k63062



























                    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%2f123773%2freplacing-3-or-more-digits-with-equivalent-number-of%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

                    How to check contact read email or not when send email to Individual?

                    Bahrain

                    Postfix configuration issue with fips on centos 7; mailgun relay