変数で sed を使用します。

変数で sed を使用します。

だから私はsedを使って特定の文字列を見つけて置き換えます。

ケース 1. ファイルの値は常に定数です。パラメータをfalseからtrueに変更したいと思います。だから私は次のコマンドを使います。

    sed -i -e 's/entry key="ignore_vc_cert" value="false"/entry key="ignore_vc_cert" value="true"/g'  /usr/local/avamar/var/mc/server_data/prefs/mcserver.xml

ignore_vc_certその後、その値を見つけてからにfalse変更しますtrue。良い結果。

次に、次のパラメータを含む別のファイルがあります。

<numberOfDisk>4</numberOfDisk>

これで、ここの値は展開によって変更される可能性があります。4ここにある数字やその他を次の出力に変えたいと思います。df -h | grep data0* | wc -l

df -h | grep data0* | wc -lしたがって、の出力がisの場合は、パラメータの値fromを3toに置き換える必要があります。numberOfDisk43

私は次のコマンドを書きました:

sed -e s/"$(cat /usr/local/vdr/etc/vdr-configuration.xml  | grep -i numberOfDisk)"/<numberOfDisk>"$(df -h | grep data0* | wc -l)"</numberOfDisk>/g > /usr/local/vdr/etc/vdr-configuration.xml

しかし何らかの理由でnumberOfDisk: No such file or directory

私がするなら:

sed -e 's/"$(cat /usr/local/vdr/etc/vdr-configuration.xml  | grep -i numberofdisk)"/<numberOfDisk>"$(df -h | grep data0* | wc -l)"</numberOfDisk>/g' /usr/local/vdr/etc/vdr-configuration.xml

それから私は次を得ます:sed: -e expression #1, char 15: unknown option tos ''

この問題を解決する方法についてご意見をお持ちですか?

ベストアンサー1

XML文書を操作するには、XMLパーサー/ツールを使用してください。

一緒にやるよxmlstarlet

grep -c 'data0*'- パイプが必要なく一致するライン数を出力します。wc -l


xmlstarlet ed -u "//numberOfDisk" -v $(df -h | grep -c 'data0*') /usr/local/vdr/etc/vdr-configuration.xml > /tmp/tmp-test.xml 
           && mv /tmp/tmp-test.xml /usr/local/vdr/etc/vdr-configuration.xml

ed- 編集モード

-u--update) - XML文書の更新

おすすめ記事