replace a substring using sed












0















I have a sample input file:



 $ cat test.txt 

xz:xx.d.r1.latest


Now I want to replace a part with new value. For ex: I wanted to replace r1 with r2 in the above text so the new o/p would be



 xz:xx.d.r2.latest


I wanted to do this using variables. For example, consider the value to be replaced stored in variable old and the value to be replaced with in variable new:



 $ old=r1
$ new=r2


Now for replacing, I tried



sed -i 's/'"${old}"'/'"${new}"'/g' test.txt
sed -i "s/$old}/${new}/g" test.txt
sed -i 's/'"$old"'/'"$new"'/g' test.txt
sed -i "s/${old}/${new}/g" test.txt


But none of them worked the value is not being replaced. So can anyone help me or tell whether the syntax is correct or what I am missing.










share|improve this question

























  • All of these commands except sed -i "s/$old}/${new}/g" test.txt work for me. Can you describe your problem in more details?

    – Arkadiusz Drabczyk
    May 16 '18 at 17:29













  • the values are not being replaced which I wanted. I think the command I used is not working

    – DENDULURI CHAITANYA
    May 16 '18 at 18:21











  • @ArkadiuszDrabczyk And that one didn't work cos you like he, were missing a {

    – barlop
    May 16 '18 at 19:16











  • The second and third commands are missing a { between the $ and o of ${old}

    – barlop
    May 16 '18 at 19:16













  • all four work for me(one must correct the second and third) pastebin.com/raw/dgr7dtmA

    – barlop
    May 16 '18 at 19:18


















0















I have a sample input file:



 $ cat test.txt 

xz:xx.d.r1.latest


Now I want to replace a part with new value. For ex: I wanted to replace r1 with r2 in the above text so the new o/p would be



 xz:xx.d.r2.latest


I wanted to do this using variables. For example, consider the value to be replaced stored in variable old and the value to be replaced with in variable new:



 $ old=r1
$ new=r2


Now for replacing, I tried



sed -i 's/'"${old}"'/'"${new}"'/g' test.txt
sed -i "s/$old}/${new}/g" test.txt
sed -i 's/'"$old"'/'"$new"'/g' test.txt
sed -i "s/${old}/${new}/g" test.txt


But none of them worked the value is not being replaced. So can anyone help me or tell whether the syntax is correct or what I am missing.










share|improve this question

























  • All of these commands except sed -i "s/$old}/${new}/g" test.txt work for me. Can you describe your problem in more details?

    – Arkadiusz Drabczyk
    May 16 '18 at 17:29













  • the values are not being replaced which I wanted. I think the command I used is not working

    – DENDULURI CHAITANYA
    May 16 '18 at 18:21











  • @ArkadiuszDrabczyk And that one didn't work cos you like he, were missing a {

    – barlop
    May 16 '18 at 19:16











  • The second and third commands are missing a { between the $ and o of ${old}

    – barlop
    May 16 '18 at 19:16













  • all four work for me(one must correct the second and third) pastebin.com/raw/dgr7dtmA

    – barlop
    May 16 '18 at 19:18
















0












0








0








I have a sample input file:



 $ cat test.txt 

xz:xx.d.r1.latest


Now I want to replace a part with new value. For ex: I wanted to replace r1 with r2 in the above text so the new o/p would be



 xz:xx.d.r2.latest


I wanted to do this using variables. For example, consider the value to be replaced stored in variable old and the value to be replaced with in variable new:



 $ old=r1
$ new=r2


Now for replacing, I tried



sed -i 's/'"${old}"'/'"${new}"'/g' test.txt
sed -i "s/$old}/${new}/g" test.txt
sed -i 's/'"$old"'/'"$new"'/g' test.txt
sed -i "s/${old}/${new}/g" test.txt


But none of them worked the value is not being replaced. So can anyone help me or tell whether the syntax is correct or what I am missing.










share|improve this question
















I have a sample input file:



 $ cat test.txt 

xz:xx.d.r1.latest


Now I want to replace a part with new value. For ex: I wanted to replace r1 with r2 in the above text so the new o/p would be



 xz:xx.d.r2.latest


I wanted to do this using variables. For example, consider the value to be replaced stored in variable old and the value to be replaced with in variable new:



 $ old=r1
$ new=r2


Now for replacing, I tried



sed -i 's/'"${old}"'/'"${new}"'/g' test.txt
sed -i "s/$old}/${new}/g" test.txt
sed -i 's/'"$old"'/'"$new"'/g' test.txt
sed -i "s/${old}/${new}/g" test.txt


But none of them worked the value is not being replaced. So can anyone help me or tell whether the syntax is correct or what I am missing.







bash shell sed






share|improve this question















share|improve this question













share|improve this question




share|improve this question








edited May 16 '18 at 17:56









Arkadiusz Drabczyk

1,636711




1,636711










asked May 16 '18 at 16:54









DENDULURI CHAITANYADENDULURI CHAITANYA

1




1













  • All of these commands except sed -i "s/$old}/${new}/g" test.txt work for me. Can you describe your problem in more details?

    – Arkadiusz Drabczyk
    May 16 '18 at 17:29













  • the values are not being replaced which I wanted. I think the command I used is not working

    – DENDULURI CHAITANYA
    May 16 '18 at 18:21











  • @ArkadiuszDrabczyk And that one didn't work cos you like he, were missing a {

    – barlop
    May 16 '18 at 19:16











  • The second and third commands are missing a { between the $ and o of ${old}

    – barlop
    May 16 '18 at 19:16













  • all four work for me(one must correct the second and third) pastebin.com/raw/dgr7dtmA

    – barlop
    May 16 '18 at 19:18





















  • All of these commands except sed -i "s/$old}/${new}/g" test.txt work for me. Can you describe your problem in more details?

    – Arkadiusz Drabczyk
    May 16 '18 at 17:29













  • the values are not being replaced which I wanted. I think the command I used is not working

    – DENDULURI CHAITANYA
    May 16 '18 at 18:21











  • @ArkadiuszDrabczyk And that one didn't work cos you like he, were missing a {

    – barlop
    May 16 '18 at 19:16











  • The second and third commands are missing a { between the $ and o of ${old}

    – barlop
    May 16 '18 at 19:16













  • all four work for me(one must correct the second and third) pastebin.com/raw/dgr7dtmA

    – barlop
    May 16 '18 at 19:18



















All of these commands except sed -i "s/$old}/${new}/g" test.txt work for me. Can you describe your problem in more details?

– Arkadiusz Drabczyk
May 16 '18 at 17:29







All of these commands except sed -i "s/$old}/${new}/g" test.txt work for me. Can you describe your problem in more details?

– Arkadiusz Drabczyk
May 16 '18 at 17:29















the values are not being replaced which I wanted. I think the command I used is not working

– DENDULURI CHAITANYA
May 16 '18 at 18:21





the values are not being replaced which I wanted. I think the command I used is not working

– DENDULURI CHAITANYA
May 16 '18 at 18:21













@ArkadiuszDrabczyk And that one didn't work cos you like he, were missing a {

– barlop
May 16 '18 at 19:16





@ArkadiuszDrabczyk And that one didn't work cos you like he, were missing a {

– barlop
May 16 '18 at 19:16













The second and third commands are missing a { between the $ and o of ${old}

– barlop
May 16 '18 at 19:16







The second and third commands are missing a { between the $ and o of ${old}

– barlop
May 16 '18 at 19:16















all four work for me(one must correct the second and third) pastebin.com/raw/dgr7dtmA

– barlop
May 16 '18 at 19:18







all four work for me(one must correct the second and third) pastebin.com/raw/dgr7dtmA

– barlop
May 16 '18 at 19:18












1 Answer
1






active

oldest

votes


















0














In case you're using BSD's sed (e.g. on macOS), -i option is a non-standard FreeBSD extension and it requires an argument. So to make sure you're using the right cross-compatible syntax, you should change it to:



sed -i'.bak' ... # rest of the command


Other than that, your commands are fine. E.g.



sed -i'.bak' 's/'"${old}"'/'"${new}"'/g' test.txt


Tested in Bash shell on WSL (Ubuntu on Windows).






share|improve this answer























    Your Answer








    StackExchange.ready(function() {
    var channelOptions = {
    tags: "".split(" "),
    id: "3"
    };
    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: true,
    noModals: true,
    showLowRepImageUploadWarning: true,
    reputationToPostImages: 10,
    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%2fsuperuser.com%2fquestions%2f1323286%2freplace-a-substring-using-sed%23new-answer', 'question_page');
    }
    );

    Post as a guest















    Required, but never shown

























    1 Answer
    1






    active

    oldest

    votes








    1 Answer
    1






    active

    oldest

    votes









    active

    oldest

    votes






    active

    oldest

    votes









    0














    In case you're using BSD's sed (e.g. on macOS), -i option is a non-standard FreeBSD extension and it requires an argument. So to make sure you're using the right cross-compatible syntax, you should change it to:



    sed -i'.bak' ... # rest of the command


    Other than that, your commands are fine. E.g.



    sed -i'.bak' 's/'"${old}"'/'"${new}"'/g' test.txt


    Tested in Bash shell on WSL (Ubuntu on Windows).






    share|improve this answer




























      0














      In case you're using BSD's sed (e.g. on macOS), -i option is a non-standard FreeBSD extension and it requires an argument. So to make sure you're using the right cross-compatible syntax, you should change it to:



      sed -i'.bak' ... # rest of the command


      Other than that, your commands are fine. E.g.



      sed -i'.bak' 's/'"${old}"'/'"${new}"'/g' test.txt


      Tested in Bash shell on WSL (Ubuntu on Windows).






      share|improve this answer


























        0












        0








        0







        In case you're using BSD's sed (e.g. on macOS), -i option is a non-standard FreeBSD extension and it requires an argument. So to make sure you're using the right cross-compatible syntax, you should change it to:



        sed -i'.bak' ... # rest of the command


        Other than that, your commands are fine. E.g.



        sed -i'.bak' 's/'"${old}"'/'"${new}"'/g' test.txt


        Tested in Bash shell on WSL (Ubuntu on Windows).






        share|improve this answer













        In case you're using BSD's sed (e.g. on macOS), -i option is a non-standard FreeBSD extension and it requires an argument. So to make sure you're using the right cross-compatible syntax, you should change it to:



        sed -i'.bak' ... # rest of the command


        Other than that, your commands are fine. E.g.



        sed -i'.bak' 's/'"${old}"'/'"${new}"'/g' test.txt


        Tested in Bash shell on WSL (Ubuntu on Windows).







        share|improve this answer












        share|improve this answer



        share|improve this answer










        answered Feb 22 at 14:45









        kenorbkenorb

        11.5k1580116




        11.5k1580116






























            draft saved

            draft discarded




















































            Thanks for contributing an answer to Super User!


            • 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%2fsuperuser.com%2fquestions%2f1323286%2freplace-a-substring-using-sed%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 do I know what Microsoft account the skydrive app is syncing to?

            When does type information flow backwards in C++?

            Grease: Live!