大規模ファイルセットの2つの設定パターンの間にテキストを挿入する必要があります。
次の形式で各行を変更する必要があります。
<a href="/entry/someFile">
これに関して:
<a href="/entry/someFile.xhtml">
これを行うためにコマンドを作成しようとしましたが、sed
非常に難しいです。
href="/entry/
と区切り文字を使用する必要があることを知っていますが、より複雑なテキストの挿入/代替の">
使用方法を理解していません。sed
編集:私の元の投稿が不明であることを知っています。定数パターンhref="/entry/
はとです">
。 「someFile」はどんなファイル名でも構いません。
ベストアンサー1
解決策についてsed
は、この回答の詳細をご覧ください。
ノードが正しい形式のXML文書の一部であり、既存の値が次に始まるときにそのラベル値をa
追加したいとします。.xhtml
href
/entry/
xml ed -u '//a[starts-with(@href, "/entry/")]/@href' \
-x 'concat(../@href,".xhtml")' file.xml >file-new.xml
これは以下を使用します。XMLスター(時にはxmlstarlet
単にinstallの代わりにインストールされますxml
)関連するノードを見つけて、ドキュメントに表示される場所に関係なくそのプロパティa
に接続します。.xhtml
href
結果はここに新しいファイルとして保存されますが、xml ed --inplace ...
ファイルが有効であることを確認したら、そのファイルを編集できます。
テスト:
$ cat file.xml
<?xml version="1.0"?>
<root>
<a href="/entry/someFile1"/>
<a href="/entry/someFile2"/>
<a href="/entry/someFile3"/>
</root>
$ xml ed -u '//a[starts-with(@href, "/entry/")]/@href' -x 'concat(../@href,".xhtml")' file.xml
<?xml version="1.0"?>
<root>
<a href="/entry/someFile1.xhtml"/>
<a href="/entry/someFile2.xhtml"/>
<a href="/entry/someFile3.xhtml"/>
</root>
を使ってsed
(あなたはいいえ通常は正しい形式のXMLファイルに使用されます):
sed 's|<a href="/entry/[^"]*|&.xhtml|g' file.xml
<a href="/entry/
これは、文字以外の文字が複数ある文字列と一致します"
(これはファイル名になります)。次に、一致する部分全体をそれ自体と文字列に置き換えます.xhtml
。
を使用すると、sed -i
修正が適用されます。
テスト(上記と同じファイル内):
$ sed 's|<a href="/entry/[^"]*|&.xthml|g' file.xml
<?xml version="1.0"?>
<root>
<a href="/entry/someFile1.xhtml"/>
<a href="/entry/someFile2.xhtml"/>
<a href="/entry/someFile3.xhtml"/>
</root>