sed returns “sed: command garbled”

后端 未结 4 356
孤独总比滥情好
孤独总比滥情好 2020-12-21 18:42

I have this data in file.txt:

1234-abca-dgdsf-kds-2;abc dfsfds 2
123-abcdegfs-sdsd;dsfdsf dfd f
12523-cvjbsvndv-dvd-dvdv;dsfdsfpage

I want

相关标签:
4条回答
  • 2020-12-21 18:58

    -.* here the * greedy, so this would fail if there are more than one ;

    echo "12523-cvjbsvndv-dvd-dvdv;dsfdsfpage;test" | sed -e "s/-.*;/;/"
    12523;test
    

    Change to -[^;]*

    echo "12523-cvjbsvndv-dvd-dvdv;dsfdsfpage;test" | sed -e "s/-[^;]*;/;/"
    12523;dsfdsfpage;test
    
    0 讨论(0)
  • 2020-12-21 19:10

    This should work :

    sed 's/-.*;/;/g' file > newFile
    
    0 讨论(0)
  • 2020-12-21 19:14

    sed replacement commands are defined as (source):

    's/REGEXP/REPLACEMENT/[FLAGS]'
    

    (substitute) Match the regular-expression against the content of the pattern space. If found, replace matched string with REPLACEMENT.

    However, you are saying:

    sed "s/-.*;/;"
    

    That is:

    sed "s/REGEXP/REPLACEMENT"
    

    And hence missing a "/" at the end of the expression. Just add it to have:

    sed "s/-.*;/;/"
    #            ^
    
    0 讨论(0)
  • 2020-12-21 19:23

    You are missing a slash at the end of the sed command:

    Should be "s/-.*;/;/"

    0 讨论(0)
提交回复
热议问题