たとえば、ファイルを検索すると。 s_webdomainのfile.xmlは次のとおりです。
<hostname oa_var="s_webhost">hostname</hostname>
<externURL oa_var="s_external_url">https://hostname:4450</externURL>
<directory_index oa_var="s_directory_index">index.html</directory_index>
<webentryhost oa_var="s_webentryhost">hostname.host</webentryhost>
<webentrydomain oa_var="s_webentrydomain">services.uk</webentrydomain>
<domain oa_var="s_webdomain">services.uk</domain>
<server_ip_address oa_var="s_server_ip_address"/>
<!-- Configuration files -->
<!-- SSL Variables -->
<url_protocol oa_var="s_url_protocol">http</url_protocol>
<web_ssl_directory oa_var="s_web_ssl_directory">/u03/app/ENV/gs/inst/ENV_01-bsapp01/certs</web_ssl_directory>
<local_url_protocol oa_var="s_local_url_protocol">http</local_url_protocol>
私はservices.ukを置き換えたいと思います。
<domain oa_var="s_webdomain">SOME_DIFFERENT_TEXT</domain>
$ grep s_webdomain file.xml | awk -F '>' '{print $2}' | awk -F '<' '{print $1}'
イギリスサービスネットワーク
services.ukをSOME_DIFFERENT_TEXTに変更する方法についてのアイデアはありますか? sedコマンドが必要な場合がありますが、わかりません。
ありがとうございます。
ベストアンサー1
構造化文書形式の文書を扱うときに最適な処理ツールは、その形式を認識するツールです。
以下は、XML処理ツールを使用して、すべてのノードの値を属性xmlstarlet
として値に置き換えます。domain
ou_var
s_webdomain
xmlstarlet edit \
--update '//domain[@oa_var = "s_webdomain"]' \
--value "SOME_DIFFERENT_TEXT" file
または短いオプションを使用してください。
xmlstarlet ed \
-u '//domain[@oa_var = "s_webdomain"]' \
-v "SOME_DIFFERENT_TEXT" file
このコマンドは、XPathクエリを使用して//domain[@oa_var = "s_webdomain"]
更新される入力文書内の可能なすべての場所を指定します。一致する各エンティティの値は(この場合)文字列で更新されますSOME_DIFFERENT_TEXT
。
Xpathパターンの最初の文字は、ノードを見つけることができること//
を示します。domain
どこかに。一般に、人々は文書の構造を知っており、処理するノードへのより正確なパスを指定します。
文書を「所定の位置」に変更するには、後ろに--inplace
(-L
)を追加します。edit
たとえば、複数のノードに影響を与えるには、webentrynode
値は次のとおりです。oa_var
s_webentrydomain
xmlstarlet edit \
--update '//domain[@oa_var = "s_webdomain"]' \
--value "SOME_DIFFERENT_TEXT" \
--update '//webentrydomain[@oa_var = "s_webentrydomain"]' \
--value "SOME_DIFFERENT_TEXT" file
到着タブレット使用できる値はxmlstarlet select
次のとおりです。
xmlstarlet select \
--template \
--value-of '//domain[@oa_var = "s_webdomain"]' \
-nl file
または短いオプションを使用してください。
xmlstarlet sel -t -v '//domain[@oa_var = "s_webdomain"]' -n file