1

我在 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

4 回答 4

2

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

's/REGEXP/REPLACEMENT/[FLAGS]'

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

但是,您是说:

sed "s/-.*;/;"

那是:

sed "s/REGEXP/REPLACEMENT"

因此在表达式末尾缺少一个“/”。只需将其添加即可:

sed "s/-.*;/;/"
#            ^
于 2017-08-31T14:15:13.583 回答
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
于 2013-10-16T06:05:15.127 回答
1

sed您在命令末尾缺少斜杠:

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

于 2013-10-15T18:33:57.143 回答
0

这应该工作:

sed 's/-.*;/;/g' file > newFile
于 2013-10-15T18:33:49.997 回答