パッチが行全体を置き換えるのか、行の文字だけを置き換えるのかは実際には問題ではありませんが(最終結果は同じです、違います...?)、これは「パッチ」の質問ではないと思います。「sed」を使用したより簡単な解決策については、以下を参照してください。
たとえば、次のように想定します。
$ cat f1.txt
<xml>
<foo:ListeningPortBar>3423</foo:ListeningPortBar>
</xml>
$cat f2.txt
<xml>
<cat:LoremIpsum>3423</cat:LoremIpsum>
</xml>
次に、文字通りパッチは次のようになります。
$ diff -u f1.txt f2.txt
--- f1.txt 2012-07-08 03:14:39.328328048 -0700
+++ f2.txt 2012-07-08 03:14:30.618177130 -0700
@@ -1,3 +1,3 @@
<xml>
-<foo:ListeningPortBar>3423</foo:ListeningPortBar>
+<cat:LoremIpsum>3423</cat:LoremIpsum>
</xml>
このパッチファイルは、テンプレートとして使用したり、更新する必要のあるすべてのファイルの正しい値で変更したり、すべてのファイルに個別に適用したりできます。それは必要以上の仕事のように聞こえます。
一方、「sed」を使用するだけです。
$ sed 's/<foo:ListeningPortBar>\([0-9]*\)<\/foo:ListeningPortBar>/<cat:LoremIpsum>\1<\/cat:LoremIpsum>/' f1.txt
<xml>
<cat:LoremIpsum>3423</cat:LoremIpsum>
</xml>
XMLを使用しているので、xsltprocを使用することも別の方法ですが、この単純な検索と置換のタスクではおそらくやり過ぎでしょう。
これをスクリプトで使用するには、次のようにします( "etc / etc"を上記のsedに置き換えます)。
for f in $(find dir -name "*.xml" -exec egrep 'foo:ListeningPortBar' {} \; -print)
do
sed -i.bak 's/etc/etc/g' $f
done
...次に、「。bak」ファイルが実際に変更されたファイルと異なることを確認します。