sed返回“sed:命令乱码”

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

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

我想在“ – ”之后replacestring,直到“;” 只用“;”,这样我得到:

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

我试着用命令:

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

但它给了我以下错误:

sed命令乱码

为什么发生这种情况?

这应该工作:

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

sed命令结尾缺少斜线:

应该是"s/-.*;/;/"

-.*这里*贪婪,所以这将失败,如果有不止一个;

 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 

sed替换命令被定义为( 来源 ):

 's/REGEXP/REPLACEMENT/[FLAGS]' 

(替代)匹配正则表达式和模式空间的内容。 如果找到,用REPLACEMENT替换匹配的字符串。

但是,你在说:

 sed "s/-.*;/;" 

那是:

 sed "s/REGEXP/REPLACEMENT" 

因此在表达式结尾处缺少“/”。 只要添加它有:

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