複数のファイルの中身を検索して、条件に一致した行だけ消す方法Shellピクトリンク事業部開発部インフラ課の「アドベントカレンダー3記事目で若干ネタ切れの気配を感じ始めたエンジニア」の橋本です。12月中はもろびとがこぞってアドベントカレンダーするので、6月くらいにやったほうが目立てるんじゃないかなとか現実逃避しています。梅雨明けとか讃えましょうよ。今回は、複数のファイルに横断検索をかける方法、ヒットした情報だけを消す方法をご紹介しようと思います。いう時に便利?いろんな場面で活用できる余地のあるテクニックだと思いますが、実例をあげるとメーリングリストの管理などに便利に使えます。このように、ひとつのメーリングリストにユーザ名を連ねる形で運用している場合を想像してみてください。社内の関係者に一斉に情報が行き渡るよう、いい感じにメーリングリストが構築されているような環境ですね。この状態で、「桐島、弊社やめるってよ」と言われた場合にリストの管理者がやらないといけないのは、ファイルの中に「桐島」が含まれるものを全て探し、このように「桐島」を削除した状態で上書き保存する必要があるはずです。この例だとファイルは3つだけですが、これが20も30もあったら大変面倒なうえに、そのうち作業ミスも発生しかねません。これをスクリプト一発で終えることができたら幸せですよね!実際のスクリプト以下の例は「ファイル名が.qmail-から始まるファイルから対象者を探して消す」スクリプトです。ファイルに含まれる、対象ユーザを一括で消去します。ファイルに含まれる、対象ユーザを一括で消去します。delete?"ConfirmDeletefi以下のようにして使います。例のごとく実行権限付与を忘れずに。「本当に消していいの?」と聞く部分が長いだけで、中身は至ってシンプル。${file}doneこれで対象者を削除して上書き保存しているだけです。