2014-02-13 137 views
0

我已經在Makefile中生成以下代碼:替換bash腳本(MacOS的)字符串

${SED} -i '' -e "s|(DESTDIR)|${DESTDIR}|g" $(pcfiles) 
# ${SED} -i "s|(DESTDIR)|${DESTDIR}|g" $(pcfiles) 

,我想用

# ${SED} -i '' -e "s|(DESTDIR)|${DESTDIR}|g" $(pcfiles) 
    ${SED} -i "s|(DESTDIR)|${DESTDIR}|g" $(pcfiles) 

更換所以它只是註釋掉一個的問題一行,並替換其他。

但由於單引號和雙引號我無法實現它。

如果一些正則表達式專家願意花1-2分鐘幫我出 那會很棒。

我在這裏拉我的頭髮。

感謝

+0

如果它在'Makefile'中生成_請考慮修復源代碼。如果要再次生成它,則需要運行腳本才能修復它。 – devnull

+0

嚴重的是我無法修復源代碼,因爲它是在Mac上生成和交叉編譯的。如果你能幫助完成一個簡單的「sed」變化。 – Disco

回答

1
# Comment out 1st line. 
sed -E 's`([[:space:]]*\$\{SED\} -i '"''"' -e "s\|\(DESTDIR\)\|\$\{DESTDIR\}\|g" \$\(pcfiles\))`#\1`' Makefile 
# Uncomment 2nd line. 
sed -E 's`#([[:space:]]+\$\{SED\} -i "s\|\(DESTDIR\)\|\$\{DESTDIR\}\|g" \$\(pcfiles\))`\1`' Makefile 

sed命令在單引號字符串,這是通常更易於使用(你不用擔心外殼擴展您的字符串)。

第一個命令的棘手方面是單引號不能包含在單引號字符串中(即使轉義也不是一個選項),所以命令簡單地分成兩個單引號字符串,其中"''" - 總計爲'' - 拼接英寸

另一個棘手的方面是要逃避所有特殊的正則表達式字符。對。