sedコマンドを使って最後にマッチした行に追記する方法

CentOSのaliasesファイルを、メンテナンスで修正しなければならず、手順としてviで修正するより、sedで追記する方法はないか調べてみた。

行指定する方法はあると思うが、特定の文字列にマッチした行に対する操作をしたかったため、今回の備忘録を作成。

 

 

最後にマッチした行に対する操作は、ファイルを逆から読み込むしかなさそう。

tacコマンドを使ってファイルを逆から読み取り、最後に元に戻すという操作になる。

以下のコマンドは、[特定文字]にマッチした最終行の

次の行に、指定した[追加文字]を追記する。

cat [ファイル名] | tac | sed '0,/[特定文字]/{/[特定文字]/s/^/[追加文字]\n/}' | tac

 

 

ちなみにsedコマンドで直接ファイルを修正しようとすると、ファイルがありませんという結果になるので、リダイレクトでファイルの上書きをするしかなさそう。

もちろん元のファイルはバックアップを取っておく。

cat [ファイル名] | tac | sed '0,/[特定文字]/{/[特定文字]/s/^/[追加文字]\n/}' | tac > [保存ファイル名]