web-dev-qa-db-ja.com

テキストを見つけてコピーし、ファイルの次の行に挿入するにはどうすればよいですか?

.xmlファイルを処理するスクリプトを記述しようとしています。 <title>要素を持つすべての行を検索し、それをコピーして、見つかった次の行に貼り付ける必要がありますが、要素タイプも変更する必要があります。例を示します。

元の:

いくつかのテキスト
<title>text 1</title>
いくつかのテキスト
<title>text 2</title>
いくつかのテキスト

そして、これは私が得る必要があるものです:

いくつかのテキスト
<title>text 1</title>
<description>text 1</description>
いくつかのテキスト
<title>text 2</title>
<description>text 2</description>
いくつかのテキスト

Sedやgrep(またはその他のツール)を使用して実行できますか?

2
xjr

XMLパーサー/プロセッサーは、XMLデータを操作するための適切なツールです。

xmlstarlet 解決策:

模範的なinput.xmlコンテンツ:

<root>
some text
<title>text 1</title>
some text
<title>text 2</title>
some text </root>

xmlstarlet ed -a '//title' -t elem -n 'description' -v '' input.xml \
 | xmlstarlet ed -u '//description' -x './preceding-sibling::title[1]/text()'

出力:

<?xml version="1.0"?>
<root>
some text
<title>text 1</title><description>text 1</description>
some text
<title>text 2</title><description>text 2</description>
some text </root>

  • ed-編集モード

  • -a-追加アクション

  • -u-更新アクション

3
RomanPerekhrest