次のようなファイルがあると仮定します
<root>
<bean:write name='iframesrcUrl'/>
<bean:write name="iframesrcUrl"/>
<bean:write name="currentPage" property="title" filter="false"/>
<foo><bar/></foo>
</root>
このコマンドで置換を行うことができますsed
(GNU sed を使用):
sed "s/<bean:write name=[\'\"]\?iframesrcUrl[\'\"]\?\/>/\${ iframesrcUrl }/g; \
s/<bean:write name=[\'\"]\?currentPage[\'\"]\?.*\/>/\${ currentPage.title }/g;" \
input.xml
これは以下を生成します:
<root>
${ iframesrcUrl }
${ iframesrcUrl }
${ currentPage.title }
<foo><bar/></foo>
</root>
それはあなたが必要とするものですか?または、属性の値を置き換えますか? または、置換テキストをこれらのタグに挿入しますか?
すべてのファイルをその場で見つけて編集するには (注意! ファイルを変更します。-i
使用前にテストせずに、'*.jsp' の代わりにファイル マスクを入れてください):
find . -type f -name '*.jsp' -print0 | xargs -0 sed -i "..."
アップデート
ファイル自体の行ではなく、属性値を置き換えるには、 /xmlstarlet
の代わりに使用することを強くお勧めします。はるかに信頼性が高く、柔軟性があります。処理するには完全な(有効な)ファイルが必要なため、あなたのケースに正確にソリューションを投稿することはできませんが、これはアイデアです:sed
awk
xmlstarlet
与えられたファイル:
<a>
<b>
<c name="foo"/>
<c name="bar"/>
</b>
</a>
とで置き換えたいfoo
としましょう。次に、このコマンドでそれを実行します(読みやすくするために行を分割しています):SPAM
bar
EGGS
$ printf '<a><b><c name="foo"/><c name="bar"/></b></a>' | \
xmlstarlet ed --update "//c[@name='foo']/@name" -v SPAM \
--update "//c[@name='bar']/@name" -v EGGS
<?xml version="1.0"?>
<a>
<b>
<c name="SPAM"/>
<c name="EGGS"/>
</b>
</a>
XPath 構文を使用して、置き換える要素を選択しました (最初のケースではname
、任意のタグに属し、にc
等しい属性ですfoo
)。ed
のサブコマンドはxmlstarlet
さまざまな変換を可能にし、要素の置換 (更新) はその 1 つです。
実際の例ではbean
、ワークスペースも指定する必要があります。つまり、次のようなものを追加します
-N bean=urn:...
xmlstarlet
のオプションのリストに。.jsp ファイルの最初の行で正しい URI を見つけることができます (調べる必要はありません)。