[英]sed returns “sed: command garbled”
我在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命令出现乱码
为什么会这样呢?
sed
替换命令定义为( source ):
's/REGEXP/REPLACEMENT/[FLAGS]'
(替代)将正则表达式与模式空间的内容匹配。 如果找到,则用REPLACEMENT替换匹配的字符串。
但是,您是在说:
sed "s/-.*;/;"
那是:
sed "s/REGEXP/REPLACEMENT"
因此在表达式末尾缺少“ /”。 只需添加即可:
sed "s/-.*;/;/"
# ^
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/-.*;/;/g' file > newFile
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.