0

hive-site.xml という構成ファイルがあります。

1 つの構成要素は次のとおりです。

  <property>
    <name>hadoop.embedded.local.mode</name>
    <value>true</value>
  </property>

シェルスクリプトで「true」を「false」に変更したい。しかし、ファイルには次のような多くの構成要素があります。

   <value>true</value> 

タグ。

したがって、文字列を検索して置換するために使用した「sed」コマンドは、私の知る限り、ここで使用するのは困難です。誰かがこれで私を助けることができれば感謝します。

4

4 に答える 4

1

これはおそらく、XPath と適切な XML ライブラリーの仕事です。これをシェル スクリプトから直接行うと、複雑で壊れやすいソリューションが作成されます。python例として、人気のあるlxmlライブラリを使用します。

from lxml import etree

tree = etree.fromstring('''
  <property>
    <name>hadoop.embedded.local.mode</name>
    <value>true</value>
  </property>
''')

e = tree.xpath('//property[name="hadoop.embedded.local.mode"]/value')[0]
e.text = 'false'
print etree.tostring(tree)

基本的に、その値を持つ要素が含まれている場合は、任意のプロパティ ノード (ドキュメント内の任意の場所)<name>を選択し、次に値要素を選択します。その後、要素のコンテンツを好みに合わせて変更し、再び文字列として出力できます。XPath は標準であるため、ほぼ同じコードが他の実装でも機能するはずです。

于 2013-04-18T05:08:13.000 に答える
0

ブロック全体を渡して変更することができます。

sed -i '/s/<property><name>hadoop.embedded.local.mode<\/name><value>true<\/value<\/property>
/<property><name>hadoop.embedded.local.mode<\/name><value>false<\/value><\/property>/' 
hive-site.xml
于 2013-04-18T04:48:45.743 に答える