我在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命令乱码
为什么会这样?
答案 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