2010-11-01 45 views
3

我建立一個script會,除其他事項外,在一個文件夾路徑的XML文件替換的模式。SED錯誤「未終止的「命令」疑難解答

sed命令我試圖使用方法是:

SEDCMD="s|PATHTOEXPORT|$2|" 

其中$2是在它的文件夾路徑命令行參數。

這就是後來被稱爲:

sed -e $SEDCMD $FILTER > $TEMPFILTER 

但是,在運行該命令,我得到一個「未終止的「命令」的錯誤。

我該如何解決這個問題?我試着改變用來分隔正則表達式的字符(從/|)。我試着用不同的方式引用命令行參數。

回答

5

的外殼看到的$SEDCMD的解析內容。如果您使用的是包含Makefile的shell腳本,則應始終使用雙引號保護所有展開的變量。雙引號將強制變量插值,但保護所有shell元字符不被進一步解釋。

sed -e "$SEDCMD" "$FILTER" > "$TEMPFILTER" 

我認爲$FILTER$TEMPFILTER是文件名?我也引用了它們,以防萬一它們包含諸如空白或其他種類的shell元字符之類的惡意內容;奇怪,是的,但它是已知的事情發生。定期運行rename 's/\s+/_/g'文件名來清除它們的空白,但對於其他文件名,您必須採取更謹慎的方法;例如,如何處理星星vs問號與括號和parens等

如果您將-x和/或-v添加到您的shell命令行中,您會看到一些跟蹤調試,我認爲它可能會顯示你在哪裏出錯了。

+0

是 - $ FILTER和$ TEMPFILTER都是文件名(不帶空格時髦) – warren 2010-11-01 16:40:25

+0

和報價' 「$ SEDCMD」'的伎倆@!謝謝 :) – warren 2010-11-01 16:42:58