sedモードと複数行の交換

sedモードと複数行の交換

テキストファイルを解析して特定の部分を置き換える必要があります。私はsedこれがそうする方法だと思いますが、複数の行を処理する方法がわかりません。

私が探しているパターンは

set cells { \  
cell1 \  
cell2 \  
cell3 \  
}

変数の内容に置き換えたいです。

以下はトリックを実行する必要がありますが、複数行では機能しません。どんなアイデアがありますか?

sed "s/set cells {.*}/set cells {$cell_variable}/" file

ベストアンサー1

次の場合sed

sed -i.bak ':a;N;$!ba;s/set cells {.*}/set cells{\n'$cell_variable'\n}/g' file
  • -i.bakインライン編集の前に元のファイルのバックアップを作成します。
  • :aa再度移動するラベルを作成します。
  • Nパターン空間に次の入力行を追加します。
  • $!最後の行だけじゃなかったら…
    • baラベルに戻るa
  • s///gパターンの検索と置換

より簡単な解決策perl

perl -0777 -i.bak -pe "s/set cells \{.*\}/set cells{\n$cell_variable\n}/igs" file
  • -0777Perlがファイル全体を飲み込むようにします。
  • -i.bakインライン編集の前に元のファイルのバックアップを作成します。

おすすめ記事