私はランニングから得た文字列を持っていますjack_lsp
。
a2j:Arturia BeatStep [28] (capture): Arturia BeatStep MIDI 1
xmlファイルには、以前のjackセッションの接続状態が保存されました。
<connection>
<output>a2j:Arturia BeatStep [20] (capture): Arturia BeatStep MIDI 1</output>
<input>starmaze:midi_to_slave_1</input>
</connection>
[]
以前のセッション(xmlファイルに保存されている)と現在のセッションの間に(括弧)内の値が変更されたことがわかります。 asu このようにファイルをロードしようとするたびにファイルの値を更新しようとします。
これを行うには、次のbashスニペットがあります。
ARTURIA_CHAN=$( jack_lsp | grep Arturia | grep capture | sed -e 's/^.*\[\(.*\)\].*$/\1/' )
ARTURIA_XMLCHAN=$( cat "${ofname}" | grep Arturia | grep capture | sed -e 's/^.*\[\(.*\)\].*$/\1/' )
if [ "${ARTURIA_CHAN}" != "${ARTURIA_XMLCHAN}" ]; then
sed -e "s/\[$ARTURIA_XMLCHAN\]/\[$ARTURIA_CHAN\]/g" -i.bak1-art "${ofname}"
echo "changing arturia from ${ARTURIA_XMLCHAN} to ${ARTURIA_CHAN}"
fi
ofname
デフォルトでは、xmlファイルである「出力ファイル名」です。
両方の変数は期待値(その内容[]
)を取得しているように見えますが、sed操作が正しく機能しないか、ファイルが保存されていません。しかし、それが本当かどうかはわかりません。たぶんそれはあなたにもっと明白でしょうか?
ありがとうございます。
答え1
XMLパーサーのより良い使用XパスXML ファイルを変更する式です。一例xmlstarlet:
$ xmlstarlet edit -L -u "/connection/output[contains(., "Arturia")]" -v "remplacement_string" file.xml