1

config.xmlというxml設定ファイルがあります。

<?xml version="1.0" encoding="UTF-8"?>
<config>
   <server-ip>192.168.1.45</server-ip>
   <server-port>1209</server-port>
   <repository-temp-path>/home/john</repository-temp-path>
</config>

「server-ip」、「server-port」、「import-path」の値を$ 1、$ 2、$3で構成するシェルスクリプトがあります。

#!/bin/sh
if [ $# -ne 3 ];then
echo "usage: argument 1:IP_Address 2:Server_PORT 3:Temp_PATH"
exit 1
fi
IP=$1
PORT=$2
DIRT=$3

echo "Change values in config.xml..."

sed "s/<server-ip>.*<\/server-ip>/<server-ip>$IP<\/server-ip>/;s/<server-port>.*<\/server-port>/<server-port>$PORT<\/server-port>/;s/<repository-temp-path>.*<\/repository-temp-path>/<repository-temp-path>$DIRT<\/repository-temp-path>/" config.xml > config2.xml

echo "Done."

ただし、「$ ./abc.sh abc」では機能し、「$ ./abc.sh 192.168.1.6 9909 / home/bbb」では機能しません。より良い解決策で?

4

4 に答える 4

2

XML+シェル= XMLStarlet

$ xmlstarlet ed -u /config/server-ip -v 192.168.1.6 -u /config/server-port -v 9909 -u /config/repository-temp-path -v /home/bbb input.xml
<?xml version="1.0" encoding="UTF-8"?>
<config>
  <server-ip>192.168.1.6</server-ip>
  <server-port>9909</server-port>
  <repository-temp-path>/home/bbb</repository-temp-path>
</config>
于 2012-09-21T04:18:56.137 に答える
2

これはあなたのために働くかもしれません:

#!/bin/sh
if [ $# -ne 3 ];then
echo "usage: argument 1:IP_Address 2:Server_PORT 3:Temp_PATH"
exit 1
fi
IP=$1
PORT=$2
DIRT=$3

echo "Change values in config.xml..."

cat <<EOF >config2.xml
<?xml version="1.0" encoding="UTF-8"?>
<config>
   <server-ip>${IP}</server-ip>
   <server-port>${PORT}</server-port>
   <repository-temp-path>${DIRT}</repository-temp-path>
</config>
EOF  

echo "Done."
于 2012-09-21T05:07:58.240 に答える
0

/ home / bbbのスラッシュはそれを捨てています(なぜそれが機能しないのかを言わなかったので、あなたは私がしたのと同じ問題に遭遇したと思います)。

入力に自信がある場合は、最初にスラッシュをエスケープできます。このためにperl、rubyなどを起動する方が良いかもしれません。

于 2012-09-21T04:15:51.607 に答える
0

xmlstarletのようなものを使用することをお勧めします。(http://xmlstar.sourceforge.net/)元の質問に対して、ピリオドと「/」がsedコマンドに置き換えられています。それらはエスケープする必要がありますが、それらが存在するかどうかはおそらくわかりません。もう少し詳しく調べますが、可能であれば、xmlstarlet、またはxml用のsed以外の別のツールを使用してください。

于 2012-09-21T04:25:34.443 に答える