0

我使用 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=\)\".*\"/
4

1 回答 1

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"

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

于 2012-09-10T16:30:11.827 回答