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"

さて、これらを1つの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"

代替を使用して 4 つのコマンドを 1 つに短縮し、メタ文字として解釈された可能性のあるピリオドを実際のピリオドと一致するように置き換えました。

于 2012-09-10T16:30:11.827 に答える