ファイル名から変数型を取得するには、sedを使用する必要があります。以前のコードを更新しています。
cat /directory/filename1.xml | sed -e "s/XYZABC/${c}/g" > /directory/filename2.xml
の値は${c}
別のファイルにあり、毎日変更されます。 sedを使用してこれを行うにはどうすればよいですか?
以下は、いくつかの追加の背景情報です。当初、この内容を含まない点お詫び申し上げます。${c}
クエリの回数を格納するために使用されるsqlplus変数。ファイルでこの数を検索する必要があります。クエリの回数Count=[$c]
となるファイルに保存されます。最初のxmlファイルでXYZABCを置き換えて、結果を新しいxmlファイルに保存する[$c]
必要があります。$c
更新:似たような問題を抱えている人がいる場合は、次のことを行いました。
rm /directory/folder/variablefilename.dat
echo $c >> /directory/folder/variablefilename.dat
d=$(grep [0-9] /directory/folder/variablefilename.dat)
sed -3 "s/ABC123/${d}/g" /directory/folder/inputfile.xml >> /directory/folder/outputfile.xml
答え1
通常、sed(またはPerl、Ruby)を使用してファイルを変更する場合は、この-i
オプションを追加します。 XMLの属性割り当てについて議論しているとしましょう。
changeit() {
let newval="$1"
shift;
# "$@" now contains all filenames
sed -i -e 's/(XYZABC[[:space:]]*=[[:space:]]*)"([^"]*)"/\1"'"$newval"'";/' "$@"
}
changeit happy-happy /directory/filename1.xml
テストする前に、ディレクトリ/ファイルをバックアップして比較してください。sed -i
非常に有害かもしれません。
これは、1行に1つの交換を適用することに注意してください。ファイルごとに1回の追加の質問/回答を見ることができます。 1行に複数回入力するには、最後のg
スラッシュ(/
)の後に追加します。
引用規則の説明:よく構成されたXMLは、属性値を二重引用符でカプセル化すると仮定します。だから我々はVARNAME = "something"
これが動作する限り。何それ自体にエスケープされた二重引用符文字は含まれていません。したがって、シェルは二重引用符を保持する必要があり、そのために一重引用符を使用します。これにより、変数が$newval
補間されるのを防ぎます。したがって、変数が拡張および拡張される前に、コマンドの引用符付き部分を閉じる必要があります$newval
。シェルを含むスペースが新しい引数(ファイル名とともに)を開始するとは思わないように、二重引用符で囲む必要があります。 sed出力の一部として二重引用符を置き換えるように単一引用符を復元します。