sedを使用して設定された2つのパターンの間にテキストを挿入するには?

sedを使用して設定された2つのパターンの間にテキストを挿入するには?

大規模ファイルセットの2つの設定パターンの間にテキストを挿入する必要があります。
次の形式で各行を変更する必要があります。

<a href="/entry/someFile">

これに関して:

<a href="/entry/someFile.xhtml">

これを行うためにコマンドを作成しようとしましたが、sed非常に難しいです。

href="/entry/と区切り文字を使用する必要があることを知っていますが、より複雑なテキストの挿入/代替の">使用方法を理解していません。sed

編集:私の元の投稿が不明であることを知っています。定数パターンhref="/entry/はとです">。 「someFile」はどんなファイル名でも構いません。

ベストアンサー1

解決策についてsedは、この回答の詳細をご覧ください。

ノードが正しい形式のXML文書の一部であり、既存の値が次に始まるときにそのラベル値をa追加したいとします。.xhtmlhref/entry/

xml ed -u '//a[starts-with(@href, "/entry/")]/@href' \
       -x 'concat(../@href,".xhtml")' file.xml >file-new.xml

これは以下を使用します。XMLスター(時にはxmlstarlet単にinstallの代わりにインストールされますxml)関連するノードを見つけて、ドキュメントに表示される場所に関係なくそのプロパティaに接続します。.xhtmlhref

結果はここに新しいファイルとして保存されますが、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>

おすすめ記事