2012-09-10 29 views
0

我在XML文件中做了一些替換(我知道這很糟糕,但它只是用於快速測試某些東西 - 通常我會使用一個解析器)使用sed。我有4點聲明,看起來完全一樣,即匹配部分的區別僅在於關鍵如何將這些sed命令壓縮爲一個?

sed -i "s/\(key=\"liferay.db.host\" value=\)\".*\"/\1\"$hostname\"/" "$installer_directory/silent.xml" 
    sed -i "s/\(key=\"idm.backend.db.host\" value=\)\".*\"/\1\"$hostname\"/" "$installer_directory/silent.xml" 
    sed -i "s/\(key=\"idm-frontend.portal-tarent.tarent-frontend-host\" value=\)\".*\"/\1\"$hostname\"/" "$installer_directory/silent.xml" 
    sed -i "s/\(key=\"openid-idp.hostname\" value=\)\".*\"/\1\"$hostname\"/" "$installer_directory/silent.xml" 

現在,我不知道是否有某種方式把這些變成一個SED聲明?

喜歡的東西

/\(key="(first_key|second_key|third_key)"\) value=\)\".*\"/ 

回答

1

這可能會爲你工作(GNU SED):

sed -i 's/\(key="\(liferay\.db\.host\|idm\.backend\.db\.host\|idm-frontend\.portal-tarent\.tarent-frontend-host\|openid-idp\.hostname\)" value=\)".*"/\1"'"$hostname"'"/' "$installer_directory/silent.xml" 

二手交替縮短了四條命令一個和更換週期,這可能被解釋爲元字符,以匹配實際時期。

+0

正是我在找的:-)。 – helpermethod