Bash replace string at multiple places in a file from command line












2















I have a file with the below content. I want to replace chrome with chromeBackup but not in all places



Name=chrome
XXXXXXXXXXX
Run=bin -app "chrome/chrome.sh"
XXXXXXXXXXX
Vol.apps/chrome=chrome
XXXXXXXXXXX


Required output:



Name=chrome
XXXXXXXXXXX
Run=bin -app "chromeBackup/chromeBackup.sh"
XXXXXXXXXXX
Vol.apps/chromeBackup=chromeBackup
XXXXXXXXXXX









share|improve this question




















  • 1





    Can you describe the places that should and should not be replaced?

    – Jeff Schaller
    8 hours ago











  • Check my "required output"

    – Nani
    8 hours ago











  • A good answer would operate on any input; otherwise, someone could just statically print your desired output.

    – Jeff Schaller
    7 hours ago






  • 2





    In other words, one possible answer right now would be two tell you to open an editor and make the changes manually.

    – Jeff Schaller
    7 hours ago






  • 1





    Your required output doesn't really clarify your desired behavior. Do you want the change only on lines that start with Run= or Vol.apps? Every line except ones that start with Name=? Only lines that contain a "p"? Something else?

    – Kevin
    6 hours ago


















2















I have a file with the below content. I want to replace chrome with chromeBackup but not in all places



Name=chrome
XXXXXXXXXXX
Run=bin -app "chrome/chrome.sh"
XXXXXXXXXXX
Vol.apps/chrome=chrome
XXXXXXXXXXX


Required output:



Name=chrome
XXXXXXXXXXX
Run=bin -app "chromeBackup/chromeBackup.sh"
XXXXXXXXXXX
Vol.apps/chromeBackup=chromeBackup
XXXXXXXXXXX









share|improve this question




















  • 1





    Can you describe the places that should and should not be replaced?

    – Jeff Schaller
    8 hours ago











  • Check my "required output"

    – Nani
    8 hours ago











  • A good answer would operate on any input; otherwise, someone could just statically print your desired output.

    – Jeff Schaller
    7 hours ago






  • 2





    In other words, one possible answer right now would be two tell you to open an editor and make the changes manually.

    – Jeff Schaller
    7 hours ago






  • 1





    Your required output doesn't really clarify your desired behavior. Do you want the change only on lines that start with Run= or Vol.apps? Every line except ones that start with Name=? Only lines that contain a "p"? Something else?

    – Kevin
    6 hours ago
















2












2








2


0






I have a file with the below content. I want to replace chrome with chromeBackup but not in all places



Name=chrome
XXXXXXXXXXX
Run=bin -app "chrome/chrome.sh"
XXXXXXXXXXX
Vol.apps/chrome=chrome
XXXXXXXXXXX


Required output:



Name=chrome
XXXXXXXXXXX
Run=bin -app "chromeBackup/chromeBackup.sh"
XXXXXXXXXXX
Vol.apps/chromeBackup=chromeBackup
XXXXXXXXXXX









share|improve this question
















I have a file with the below content. I want to replace chrome with chromeBackup but not in all places



Name=chrome
XXXXXXXXXXX
Run=bin -app "chrome/chrome.sh"
XXXXXXXXXXX
Vol.apps/chrome=chrome
XXXXXXXXXXX


Required output:



Name=chrome
XXXXXXXXXXX
Run=bin -app "chromeBackup/chromeBackup.sh"
XXXXXXXXXXX
Vol.apps/chromeBackup=chromeBackup
XXXXXXXXXXX






text-processing sed string replace






share|improve this question















share|improve this question













share|improve this question




share|improve this question








edited 7 hours ago







Nani

















asked 8 hours ago









NaniNani

4617




4617








  • 1





    Can you describe the places that should and should not be replaced?

    – Jeff Schaller
    8 hours ago











  • Check my "required output"

    – Nani
    8 hours ago











  • A good answer would operate on any input; otherwise, someone could just statically print your desired output.

    – Jeff Schaller
    7 hours ago






  • 2





    In other words, one possible answer right now would be two tell you to open an editor and make the changes manually.

    – Jeff Schaller
    7 hours ago






  • 1





    Your required output doesn't really clarify your desired behavior. Do you want the change only on lines that start with Run= or Vol.apps? Every line except ones that start with Name=? Only lines that contain a "p"? Something else?

    – Kevin
    6 hours ago
















  • 1





    Can you describe the places that should and should not be replaced?

    – Jeff Schaller
    8 hours ago











  • Check my "required output"

    – Nani
    8 hours ago











  • A good answer would operate on any input; otherwise, someone could just statically print your desired output.

    – Jeff Schaller
    7 hours ago






  • 2





    In other words, one possible answer right now would be two tell you to open an editor and make the changes manually.

    – Jeff Schaller
    7 hours ago






  • 1





    Your required output doesn't really clarify your desired behavior. Do you want the change only on lines that start with Run= or Vol.apps? Every line except ones that start with Name=? Only lines that contain a "p"? Something else?

    – Kevin
    6 hours ago










1




1





Can you describe the places that should and should not be replaced?

– Jeff Schaller
8 hours ago





Can you describe the places that should and should not be replaced?

– Jeff Schaller
8 hours ago













Check my "required output"

– Nani
8 hours ago





Check my "required output"

– Nani
8 hours ago













A good answer would operate on any input; otherwise, someone could just statically print your desired output.

– Jeff Schaller
7 hours ago





A good answer would operate on any input; otherwise, someone could just statically print your desired output.

– Jeff Schaller
7 hours ago




2




2





In other words, one possible answer right now would be two tell you to open an editor and make the changes manually.

– Jeff Schaller
7 hours ago





In other words, one possible answer right now would be two tell you to open an editor and make the changes manually.

– Jeff Schaller
7 hours ago




1




1





Your required output doesn't really clarify your desired behavior. Do you want the change only on lines that start with Run= or Vol.apps? Every line except ones that start with Name=? Only lines that contain a "p"? Something else?

– Kevin
6 hours ago







Your required output doesn't really clarify your desired behavior. Do you want the change only on lines that start with Run= or Vol.apps? Every line except ones that start with Name=? Only lines that contain a "p"? Something else?

– Kevin
6 hours ago












2 Answers
2






active

oldest

votes


















7














According to the information you have provided, you want to replace it at two places, so you can use:



sed -e /^Run/s/chrome/chromeBackup/g -e /^Vol/s/chrome/chromeBackup/g file_name





share|improve this answer



















  • 4





    Or possibly sed -E '/^(Run|Vol)/s/chrome/&Backup/g'.

    – Kusalananda
    7 hours ago



















1














More general perhaps, change all instances except those on the line starting Name=



from="chrome"; to="${from}Backup"; sed "/^Name/! s/$from/$to/g" fileToChange


or just skip the first line



from="chrome"; to="${from}Backup"; sed "2,$ s/$from/$to/g" fileToChange


or only in the lines starting Run or Vol



from="chrome"; to="${from}Backup"; sed -E "/^Run|^Vol/ s/$from/$to/g" fileToChange





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%2f506329%2fbash-replace-string-at-multiple-places-in-a-file-from-command-line%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









    7














    According to the information you have provided, you want to replace it at two places, so you can use:



    sed -e /^Run/s/chrome/chromeBackup/g -e /^Vol/s/chrome/chromeBackup/g file_name





    share|improve this answer



















    • 4





      Or possibly sed -E '/^(Run|Vol)/s/chrome/&Backup/g'.

      – Kusalananda
      7 hours ago
















    7














    According to the information you have provided, you want to replace it at two places, so you can use:



    sed -e /^Run/s/chrome/chromeBackup/g -e /^Vol/s/chrome/chromeBackup/g file_name





    share|improve this answer



















    • 4





      Or possibly sed -E '/^(Run|Vol)/s/chrome/&Backup/g'.

      – Kusalananda
      7 hours ago














    7












    7








    7







    According to the information you have provided, you want to replace it at two places, so you can use:



    sed -e /^Run/s/chrome/chromeBackup/g -e /^Vol/s/chrome/chromeBackup/g file_name





    share|improve this answer













    According to the information you have provided, you want to replace it at two places, so you can use:



    sed -e /^Run/s/chrome/chromeBackup/g -e /^Vol/s/chrome/chromeBackup/g file_name






    share|improve this answer












    share|improve this answer



    share|improve this answer










    answered 7 hours ago









    Prvt_YadvPrvt_Yadv

    2,75731027




    2,75731027








    • 4





      Or possibly sed -E '/^(Run|Vol)/s/chrome/&Backup/g'.

      – Kusalananda
      7 hours ago














    • 4





      Or possibly sed -E '/^(Run|Vol)/s/chrome/&Backup/g'.

      – Kusalananda
      7 hours ago








    4




    4





    Or possibly sed -E '/^(Run|Vol)/s/chrome/&Backup/g'.

    – Kusalananda
    7 hours ago





    Or possibly sed -E '/^(Run|Vol)/s/chrome/&Backup/g'.

    – Kusalananda
    7 hours ago













    1














    More general perhaps, change all instances except those on the line starting Name=



    from="chrome"; to="${from}Backup"; sed "/^Name/! s/$from/$to/g" fileToChange


    or just skip the first line



    from="chrome"; to="${from}Backup"; sed "2,$ s/$from/$to/g" fileToChange


    or only in the lines starting Run or Vol



    from="chrome"; to="${from}Backup"; sed -E "/^Run|^Vol/ s/$from/$to/g" fileToChange





    share|improve this answer






























      1














      More general perhaps, change all instances except those on the line starting Name=



      from="chrome"; to="${from}Backup"; sed "/^Name/! s/$from/$to/g" fileToChange


      or just skip the first line



      from="chrome"; to="${from}Backup"; sed "2,$ s/$from/$to/g" fileToChange


      or only in the lines starting Run or Vol



      from="chrome"; to="${from}Backup"; sed -E "/^Run|^Vol/ s/$from/$to/g" fileToChange





      share|improve this answer




























        1












        1








        1







        More general perhaps, change all instances except those on the line starting Name=



        from="chrome"; to="${from}Backup"; sed "/^Name/! s/$from/$to/g" fileToChange


        or just skip the first line



        from="chrome"; to="${from}Backup"; sed "2,$ s/$from/$to/g" fileToChange


        or only in the lines starting Run or Vol



        from="chrome"; to="${from}Backup"; sed -E "/^Run|^Vol/ s/$from/$to/g" fileToChange





        share|improve this answer















        More general perhaps, change all instances except those on the line starting Name=



        from="chrome"; to="${from}Backup"; sed "/^Name/! s/$from/$to/g" fileToChange


        or just skip the first line



        from="chrome"; to="${from}Backup"; sed "2,$ s/$from/$to/g" fileToChange


        or only in the lines starting Run or Vol



        from="chrome"; to="${from}Backup"; sed -E "/^Run|^Vol/ s/$from/$to/g" fileToChange






        share|improve this answer














        share|improve this answer



        share|improve this answer








        edited 6 hours ago

























        answered 7 hours ago









        bu5hmanbu5hman

        1,310315




        1,310315






























            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%2f506329%2fbash-replace-string-at-multiple-places-in-a-file-from-command-line%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

            香粉寮

            GameSpot