我在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/-.*;/;/" # ^