テキストブロックをファイルの内容に置き換える

テキストブロックをファイルの内容に置き換える

テキストファイルf1の$ Elements $と$ EndElements $の間の内容を別のファイルf2のデータに置き換えたいと思います。

f1の内容は、単に次のように与えられる。

$Elements$
3
1
5
7
$EndElements$

f2の内容は次のとおりです。

1 65 71
2 32 87
3 39 98
4 41 63

私が思いついた最後のものは次のとおりです。

$Elements$
1 65 71
2 32 87
3 39 98
4 41 63
$EndElements$

これを行うには、stackexchangeページでいくつかのsedコードを試しました。 (コードをコピーしましたが、ウィンドウが開いていないため、直接リンクを提供できませんでした。申し訳ありません。)

lead='^\$Elements\$$' 
tail='^\$EndElements\$$'
# f2 is the file where the information
# to replace is kept in 
sed -e "/$lead/,/$tail/{ /$lead/{p; r insert_file
    >         }; /$tail/p; d }"  f2

これはうまくいきません。基本的には何もしません。

ベストアンサー1

そしてed(1)

echo -e '/\$Elements\$/+1,/\$EndElements\$/-1d\n.-1r f2\nw' | ed -s f1

詳細:

  • /\$Elements\$/+1,/\$EndElements\$/-1$Elements$との間の一致線$EndElements$
  • dその行を削除
  • .-1今上の行$EndElements$
  • r f2ファイルを読むf2
  • w結果を作成します。

おすすめ記事