2013-10-15 77 views
1

我在file.txt的這樣的數據:SED回報「的sed:命令亂碼」

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 command garbled

這是怎麼回事?

+0

我得到了2017年更富於表現力的錯誤信息:'sed的:-e表達式#1,燒焦8:未結束的'S'command' –

+0

@AnthonySottile或許這是在Solaris上運行。我從[Sed命令在Solaris上出現亂碼]到達此處(https://stackoverflow.com/q/45982603/1983854) – fedorqui

回答

0

這應該工作:

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

你缺少在sed命令結束斜線:

應該"s/-.*;/;/"

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 
0

sed替換命令被定義爲(source):

's/REGEXP/REPLACEMENT/[FLAGS]' 

(substitute) Match the regular-expression against the content of the pattern space. If found, replace matched string with REPLACEMENT.

但是,你說:

sed "s/-.*;/;" 

即:

sed "s/REGEXP/REPLACEMENT" 

因此在表達式末尾丟失了「/」。只需添加它具有:

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