如何将这些sed命令压缩为一个?

如何将这些sed命令压缩为一个?,sed,Sed,我使用sed在XML文件中进行了一些替换(我知道这很糟糕,但这只是为了快速测试一些东西——通常我会使用解析器)。我有4条语句看起来完全相同,即匹配部分仅在键上不同 sed -i "s/\(key=\"liferay.db.host\" value=\)\".*\"/\1\"$hostname\"/" "$installer_directory/silent.xml" sed -i "s/\(key=\"idm.backend.db.host\" value=\)\".*\"/\1\"$h

我使用sed在XML文件中进行了一些替换(我知道这很糟糕,但这只是为了快速测试一些东西——通常我会使用解析器)。我有4条语句看起来完全相同,即匹配部分仅在键上不同

  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=\)\".*\"/
这可能适用于您(GNU-sed):


使用alternation将四个命令缩短为一个,并替换了句点(可能已被解释为元字符),以匹配实际句点。

正是我要找的:-)。
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"