2013-08-21 42 views
0

我用grep找出在文件中是否存在一個特定的線或不喜歡這樣的:sed命令給出錯誤:sed的:-e表達#1,炭50:無端接`s'的命令

my $grepval=`grep "$conn[$i]" filename`; 

這是正確的,但在這之後我現在想從文件中刪除了grepval使用的sed是這樣的:

sed -i "s/$grepval//g" filename`; 

這給了我錯誤sed: -e expression #1, char 50: unterminated S'command`。 請幫助如何解決它。謝謝

有可能是一個/在$ grepval它也可以是multilines - RC。 39分鐘前

SA291錯誤代碼---- >>> -3 ERROR_NO_RESULT_FOUND。這是我的$ grepval.I使用了不同的分隔符也是這樣的:sed -i「s | $ grepval || g」/ home /abc/Desktop/xyz.txt.but它仍然給我同樣的錯誤。

+0

可能出現了一個'/''在$ grepval'也可以是多線 – 2013-08-21 05:21:15

+0

SA291 \t錯誤代碼---- >>> -3 \t ERROR_NO_RESULT_FOUND。這是我的$ grepval.I使用不同的分隔符也是這樣的:'sed -i「s | $ grepval || g」/home/abc/Desktop/xyz.txt'.but它仍然給我同樣的錯誤 – user2702225

+0

問題是,你爲什麼先grep得到一條線,然後執行替代以擺脫該線?然後出殼到Perl內的'sed'?嘖。在perl中打開文件,將行打印到文件的副本,但不要打印符合grep值的行。完成。 – TLP

回答

0

U'll必須使用sed -i而不是sed -e來更改文件.. -e用於表達式,-i是必需的,當您需要修改文件並在文件保存後修改..也chomp也將解決這個問題.. grepval var可能在最後換行符。

薩米

0

你可以得到包含有問題的字符串

my @files = qx#grep -l $search_string $filenameExpression#; 

foreach my $f (@files) 
{ 
    chomp($f); 
    # make sure your input doesn't have slash "/" then use hash "#" 
    my $ret = `perl -pi -e's#$search_string##g' $f`; 
} 
1

只是sed調用之前把這個在你的代碼文件名列表:

print "[$grepval]\n"; 

,我保證以後還有一個/在那裏,可能在字符數48左右。

解決它的一種方法是預處理$grepval所以,你把它變成一個正確格式化搜索字符串爲sed或者,如果可能的話,選擇你知道不會出現在字符串中的分隔符(sed允許不同的分隔符):

sed -i "s?$grepval??g" filename 
+0

不是/不在grepval輸出。仍然存在這個錯誤 – user2702225

1

如果更換/ pattern包含/,則不能使用/作爲分隔符。

使用不同的分隔符:

sed -i "s|$grepval||g" filename 
+0

沒有/在替換模式中仍然存在此錯誤。除sed外,還有其他任何替代方法 – user2702225

+0

@ user2702225顯示更多代碼。 – devnull

+0

if($ html =〜m#^(\ d +)\ /(\ d +)$#) {my $ grepval ='grep「$ conn [$ i]」/ home/abc/Desktop/xyz.txt' ;如果($ grepval ne「」) \t {'sed -e「s?$ grepval ?? g」/ home/abc/Desktop/xyz.txt';}如果我打印$ grepval,它會給出這個輸出:SA291 \t ERROR代碼---- >>> -3 \t ERROR_NO_RESULT_FOUND,這是好的,但我現在想從xyz.txt中刪除這一行,這是不是發生bcoz sed是給錯誤 – user2702225

0

有一個在$grepval換行符(或其他 「隱藏」 字符)。用chomp擺脫它。

你也可以考慮使用的system()的列表形式,以避免與shell元字符(只是把參數到""並不總是幫助)的問題,並試圖逃跑可能正則表達式元字符與quotemeta()拿到劇本更穩健。更好的是在Perl中完成整個事情。例如,sed -i不可移植,並且可能僅在Linux系統上工作。

+0

我用chomp,現在它不給出任何錯誤,但不從文本文件中刪除$ grepval的值。我使用了'sed -e's/$ grepval // g'/ home/abc/Desktop/xyz.txt';請幫助 – user2702225

+0

sed命令行中的'-i'在哪裏? –