sed を使用して複数の連続行を 1 つに置き換えます。

sed を使用して複数の連続行を 1 つに置き換えます。

私はすべてのPythonスクリプトで2つの連続した行を置き換えたいと思います。

import matplotlib as mpl
mpl.style.use(mpl_plt_default_template)

この行を使用してください

plt.style.use(mpl_plt_default_template)

これまで私は見つけました去る連続した2行を各行に適用される式に置き換えますが、2行を1行に完全に置き換える方法は示していません。失敗したアプローチに関して、次のsed文字列を適用しました。

sed '/import matplotlib as mpl$/N;//s/mpl.style.use(mpl_plt_default_template)/plt.style.use(mpl_plt_default_template)/g'

ノート最初の行(import matplotlib as mpl)はファイル内の他の場所に表示されることもあります。そして変わらずに維持されなければならないしたがって、目標は、2つの行が与えられた順序で順番に発生する場合にのみ置換を実行することです。

編集内容には、次の追加範囲が含まれますfind

find最後の目標は、次のようなパイプを使用して、コマンドで見つかった複数のテキストファイルでこれらの2行を置き換えることです。

find /path/to/dir/ -type f -exec sed 'old-lines/s/single-new-line' {} \;

システムの詳細:

オペレーティングシステム: Lubuntu 20.04 LTS

ベストアンサー1

ファイルを編集するには、次のスクリプト可能なテキストエディタを使用します。エドまたは前任者(どちらもPOSIXエディタです)。構文は非常に似ています。

printf '%s\n' '/^import matplotlib as mpl$/d' 's/mpl/plt' 'w' 'q' | ed -s file
printf '%s\n' '/^import matplotlib as mpl$/d' 's/mpl/plt' 'x' | ex file
  • printf '%s\n'エディタにコマンドを提供します。

  • /^import matplotlib as mpl$/dパターンに一致する最初の行を削除します。

  • s/mpl/plt次の行で交換を行います。

  • wおよびq/またはx変更を保存します。

本当にSedが欲しいなら、

sed '/^import matplotlib as mpl$/N; s/.*\nmpl/plt/' file

拡張の問題を解決するには:

find /path/to/dir/ -type f -exec sh -c '
    printf "%s\n" "/^import matplotlib as mpl\$/d" "s/mpl/plt" "w" "q" |
    ed -s "$1"' sh {} \;

おすすめ記事