How to use sed for substituting 2nd column in shell










0















I have file that looks like this :



1,2,3,4
5,6,7,8


I want to substitute 2rd column containing 6 to 89. The desired output is



1,2,3,4
5,89,7,8


But if I type



index=2
cat file | sed 's/[^,]*/89/'$index


I get



1,89,3,4
5,89,7,8


and if I type



index=2
cat file | sed 's/[^,]6/89/'$index


nothing changes.
Why is it like this? How can I fix this? Thank you.










share|improve this question

















  • 1





    [^,] matches a single character which is not comma (or newline). It is unclear what you imagine it should match.

    – tripleee
    Nov 13 '18 at 4:59











  • Possible duplicate of How to replace second column of csv file with a specific value "XYX"

    – tripleee
    Nov 13 '18 at 4:59






  • 1





    Also, the cat is useless.

    – tripleee
    Nov 13 '18 at 5:01






  • 1





    Possible duplicate of stackoverflow.com/questions/49833671/…

    – tripleee
    Nov 13 '18 at 5:05











  • Yes I did not know what [^,] means. Thank you! I don't need to substitute all lines

    – Sumin Kim
    Nov 13 '18 at 6:02















0















I have file that looks like this :



1,2,3,4
5,6,7,8


I want to substitute 2rd column containing 6 to 89. The desired output is



1,2,3,4
5,89,7,8


But if I type



index=2
cat file | sed 's/[^,]*/89/'$index


I get



1,89,3,4
5,89,7,8


and if I type



index=2
cat file | sed 's/[^,]6/89/'$index


nothing changes.
Why is it like this? How can I fix this? Thank you.










share|improve this question

















  • 1





    [^,] matches a single character which is not comma (or newline). It is unclear what you imagine it should match.

    – tripleee
    Nov 13 '18 at 4:59











  • Possible duplicate of How to replace second column of csv file with a specific value "XYX"

    – tripleee
    Nov 13 '18 at 4:59






  • 1





    Also, the cat is useless.

    – tripleee
    Nov 13 '18 at 5:01






  • 1





    Possible duplicate of stackoverflow.com/questions/49833671/…

    – tripleee
    Nov 13 '18 at 5:05











  • Yes I did not know what [^,] means. Thank you! I don't need to substitute all lines

    – Sumin Kim
    Nov 13 '18 at 6:02













0












0








0








I have file that looks like this :



1,2,3,4
5,6,7,8


I want to substitute 2rd column containing 6 to 89. The desired output is



1,2,3,4
5,89,7,8


But if I type



index=2
cat file | sed 's/[^,]*/89/'$index


I get



1,89,3,4
5,89,7,8


and if I type



index=2
cat file | sed 's/[^,]6/89/'$index


nothing changes.
Why is it like this? How can I fix this? Thank you.










share|improve this question














I have file that looks like this :



1,2,3,4
5,6,7,8


I want to substitute 2rd column containing 6 to 89. The desired output is



1,2,3,4
5,89,7,8


But if I type



index=2
cat file | sed 's/[^,]*/89/'$index


I get



1,89,3,4
5,89,7,8


and if I type



index=2
cat file | sed 's/[^,]6/89/'$index


nothing changes.
Why is it like this? How can I fix this? Thank you.







sed






share|improve this question













share|improve this question











share|improve this question




share|improve this question










asked Nov 13 '18 at 4:55









Sumin KimSumin Kim

1028




1028







  • 1





    [^,] matches a single character which is not comma (or newline). It is unclear what you imagine it should match.

    – tripleee
    Nov 13 '18 at 4:59











  • Possible duplicate of How to replace second column of csv file with a specific value "XYX"

    – tripleee
    Nov 13 '18 at 4:59






  • 1





    Also, the cat is useless.

    – tripleee
    Nov 13 '18 at 5:01






  • 1





    Possible duplicate of stackoverflow.com/questions/49833671/…

    – tripleee
    Nov 13 '18 at 5:05











  • Yes I did not know what [^,] means. Thank you! I don't need to substitute all lines

    – Sumin Kim
    Nov 13 '18 at 6:02












  • 1





    [^,] matches a single character which is not comma (or newline). It is unclear what you imagine it should match.

    – tripleee
    Nov 13 '18 at 4:59











  • Possible duplicate of How to replace second column of csv file with a specific value "XYX"

    – tripleee
    Nov 13 '18 at 4:59






  • 1





    Also, the cat is useless.

    – tripleee
    Nov 13 '18 at 5:01






  • 1





    Possible duplicate of stackoverflow.com/questions/49833671/…

    – tripleee
    Nov 13 '18 at 5:05











  • Yes I did not know what [^,] means. Thank you! I don't need to substitute all lines

    – Sumin Kim
    Nov 13 '18 at 6:02







1




1





[^,] matches a single character which is not comma (or newline). It is unclear what you imagine it should match.

– tripleee
Nov 13 '18 at 4:59





[^,] matches a single character which is not comma (or newline). It is unclear what you imagine it should match.

– tripleee
Nov 13 '18 at 4:59













Possible duplicate of How to replace second column of csv file with a specific value "XYX"

– tripleee
Nov 13 '18 at 4:59





Possible duplicate of How to replace second column of csv file with a specific value "XYX"

– tripleee
Nov 13 '18 at 4:59




1




1





Also, the cat is useless.

– tripleee
Nov 13 '18 at 5:01





Also, the cat is useless.

– tripleee
Nov 13 '18 at 5:01




1




1





Possible duplicate of stackoverflow.com/questions/49833671/…

– tripleee
Nov 13 '18 at 5:05





Possible duplicate of stackoverflow.com/questions/49833671/…

– tripleee
Nov 13 '18 at 5:05













Yes I did not know what [^,] means. Thank you! I don't need to substitute all lines

– Sumin Kim
Nov 13 '18 at 6:02





Yes I did not know what [^,] means. Thank you! I don't need to substitute all lines

– Sumin Kim
Nov 13 '18 at 6:02












2 Answers
2






active

oldest

votes


















2














Since you want to change the second column containing a 6 and you have a comma as field separator it is actually very easy with sed:



sed 's/^([^,]*),6,/1,89,/`


Here we make use of back-referencing to remember the first column.



If you want to replace the 6 in the 5th column, you can do something like:



sed 's/^(([^,]*,)4)6,/189,/'


It is, however, much more comfortable using awk:



awk 'BEGINFS=OFS=","($2==6)$2=891'





share|improve this answer























  • Thank you very much!

    – Sumin Kim
    Nov 14 '18 at 9:36


















0














I solved this by using awk



awk 'BEGINFS=OFS="," if ($2==6) $2=891' file >file1





share|improve this answer






















    Your Answer






    StackExchange.ifUsing("editor", function ()
    StackExchange.using("externalEditor", function ()
    StackExchange.using("snippets", function ()
    StackExchange.snippets.init();
    );
    );
    , "code-snippets");

    StackExchange.ready(function()
    var channelOptions =
    tags: "".split(" "),
    id: "1"
    ;
    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%2fstackoverflow.com%2fquestions%2f53274050%2fhow-to-use-sed-for-substituting-2nd-column-in-shell%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









    2














    Since you want to change the second column containing a 6 and you have a comma as field separator it is actually very easy with sed:



    sed 's/^([^,]*),6,/1,89,/`


    Here we make use of back-referencing to remember the first column.



    If you want to replace the 6 in the 5th column, you can do something like:



    sed 's/^(([^,]*,)4)6,/189,/'


    It is, however, much more comfortable using awk:



    awk 'BEGINFS=OFS=","($2==6)$2=891'





    share|improve this answer























    • Thank you very much!

      – Sumin Kim
      Nov 14 '18 at 9:36















    2














    Since you want to change the second column containing a 6 and you have a comma as field separator it is actually very easy with sed:



    sed 's/^([^,]*),6,/1,89,/`


    Here we make use of back-referencing to remember the first column.



    If you want to replace the 6 in the 5th column, you can do something like:



    sed 's/^(([^,]*,)4)6,/189,/'


    It is, however, much more comfortable using awk:



    awk 'BEGINFS=OFS=","($2==6)$2=891'





    share|improve this answer























    • Thank you very much!

      – Sumin Kim
      Nov 14 '18 at 9:36













    2












    2








    2







    Since you want to change the second column containing a 6 and you have a comma as field separator it is actually very easy with sed:



    sed 's/^([^,]*),6,/1,89,/`


    Here we make use of back-referencing to remember the first column.



    If you want to replace the 6 in the 5th column, you can do something like:



    sed 's/^(([^,]*,)4)6,/189,/'


    It is, however, much more comfortable using awk:



    awk 'BEGINFS=OFS=","($2==6)$2=891'





    share|improve this answer













    Since you want to change the second column containing a 6 and you have a comma as field separator it is actually very easy with sed:



    sed 's/^([^,]*),6,/1,89,/`


    Here we make use of back-referencing to remember the first column.



    If you want to replace the 6 in the 5th column, you can do something like:



    sed 's/^(([^,]*,)4)6,/189,/'


    It is, however, much more comfortable using awk:



    awk 'BEGINFS=OFS=","($2==6)$2=891'






    share|improve this answer












    share|improve this answer



    share|improve this answer










    answered Nov 13 '18 at 11:37









    kvantourkvantour

    8,37131230




    8,37131230












    • Thank you very much!

      – Sumin Kim
      Nov 14 '18 at 9:36

















    • Thank you very much!

      – Sumin Kim
      Nov 14 '18 at 9:36
















    Thank you very much!

    – Sumin Kim
    Nov 14 '18 at 9:36





    Thank you very much!

    – Sumin Kim
    Nov 14 '18 at 9:36













    0














    I solved this by using awk



    awk 'BEGINFS=OFS="," if ($2==6) $2=891' file >file1





    share|improve this answer



























      0














      I solved this by using awk



      awk 'BEGINFS=OFS="," if ($2==6) $2=891' file >file1





      share|improve this answer

























        0












        0








        0







        I solved this by using awk



        awk 'BEGINFS=OFS="," if ($2==6) $2=891' file >file1





        share|improve this answer













        I solved this by using awk



        awk 'BEGINFS=OFS="," if ($2==6) $2=891' file >file1






        share|improve this answer












        share|improve this answer



        share|improve this answer










        answered Nov 13 '18 at 6:03









        Sumin KimSumin Kim

        1028




        1028



























            draft saved

            draft discarded
















































            Thanks for contributing an answer to Stack Overflow!


            • 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%2fstackoverflow.com%2fquestions%2f53274050%2fhow-to-use-sed-for-substituting-2nd-column-in-shell%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







            這個網誌中的熱門文章

            Barbados

            How to read a connectionString WITH PROVIDER in .NET Core?

            Node.js Script on GitHub Pages or Amazon S3