sed返回“sed:command乱码”

时间:2013-10-15 18:27:27

标签: linux bash sed replace

我在file.txt中有这些数据:

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

我想在“ - ”之后替换字符串,直到“;”只有“;”,所以我得到:

1234;abc dfsfds 2 
123;dsfdsf dfd f 
12523;dsfdsfpage

我尝试使用命令:

sed -e "s/-.*;/;" file.txt

但它给了我以下错误:

  

sed命令乱码

为什么会这样?

4 个答案:

答案 0 :(得分:2)

sed替换命令定义为(source):

's/REGEXP/REPLACEMENT/[FLAGS]'
     

(替换)将正则表达式与模式空间的内容进行匹配。如果找到,请将匹配的字符串替换为REPLACEMENT。

但是,你说:

sed "s/-.*;/;"

那是:

sed "s/REGEXP/REPLACEMENT"

因此在表达式的末尾错过了一个“/”。只需将其添加到:

sed "s/-.*;/;/"
#            ^

答案 1 :(得分:1)

sed命令末尾缺少斜杠:

应为"s/-.*;/;/"

答案 2 :(得分:1)

-.*此处*贪婪,如果有多个;

,则会失败
echo "12523-cvjbsvndv-dvd-dvdv;dsfdsfpage;test" | sed -e "s/-.*;/;/"
12523;test

更改为-[^;]*

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

答案 3 :(得分:0)

这应该有效:

sed 's/-.*;/;/g' file > newFile