sed スクリプトは、ファイル内の最後に一致した行の後に行を挿入します。

sed スクリプトは、ファイル内の最後に一致した行の後に行を挿入します。

ファイル内のすべての同様の行の後にファイルに行を挿入するスクリプトをsedに書きたいと思います。そのため、最後に表示されるパターンを見つけてすぐに挿入する必要があります。これはファイルの最後の行ではない可能性が高いです。

私はsedのマルチパイプ呼び出しを使用するか、tacなどの他のツールを使用する多くの解決策を見ました。これらのどれも適していません。同じファイルに異なる変更を適用するより大きなスクリプトに含めることができる純粋なsedソリューションが必要です。

しばらく検索してきましたが、不可能だと思います。あきらめる前にここに尋ねなければならないと思いました!

具体的な内容が説明に役立つ場合は、Apache http.confファイルで最後の "Include"ディレクティブを見つけて、最後のディレクティブの下に別のディレクティブを挿入したいと思います。

ベストアンサー1

技術的には、以下のスクリプトは(最小限のテストで)あなたが要求したことをするようです。原則は、保留スペースにラインを保存することです。include行が見つかったら、累積行をすべて印刷し、入力の終わりに予約済みスペースを消去し、累積行に追加してnew印刷します。

#n
H
$ {
  g
  s/^/new/
  p
  b
}
/include/ {
  g
  s/^\n//
  p
  s/.*//
  h
  b
}

これは既存のsedスクリプトにうまく統合されません。実際、sedの機能が拡張されました。

Apache設定ファイルはメモリに簡単にロードできます。ストリーミングエディタを使用する代わりに、PerlやPythonなどの素晴らしいツールで読み込むか、少なくともawkを使用してください。

おすすめ記事