技術系TIPS
PR

grepで特定の文字列を含まないファイルを検索する

saratogax
記事内に商品プロモーションを含む場合があります

grep 設定ファイルの中に定義されている特定の設定値を確認したい。

そんなケースってありますよね。

例えば「memory」の設定値が書かれている複数の yaml ファイルの中から、「2Gi」の値が設定されているかを検索する場合は下記の通り。

$ grep "memory: [0-9]*[GM]i" *.yaml | grep "2Gi"

逆に「memory: 2Gi」じゃない設定の行を特定する場合は、以下のように書けますね。

$ grep "memory: [0-9]*[GM]i" *.yaml | grep -v "2Gi"

しかし、grep にはもっと効率の良いオプションもあります。

今回は、ファイルの中に該当の設定値とは別の設定値があるものを抜き出してみます。

grepの-Lオプション

man grep でマニュアルを見てみると、「-L」オプションで該当の設定を含まないファイルを抽出することができそうです。

Only the names of files not containing selected lines are written to standard output.  Pathnames are listed

once per file searched.  If the standard input is searched, the string “(standard input)” is written unless a

–label is specified.

冒頭のパイプを使った方法と比べると楽ですね。

$ grep -L "memory: 2Gi" *.yaml

残念ながらファイル名が標準出力されるだけなので、どのような設定値が埋め込まれているのかは、ファイルの中身を確認しないとわかりません。

全ファイルの設定値が統一されているかどうかを確認したい場合は便利なのですけどね。

ABOUT ME
saratoga
saratoga
フリーランスエンジニア
仕事にも趣味にも IT を駆使するフリーランスエンジニア。技術的な TIPS や日々の生活の中で深堀りしてみたくなったことを備忘録として残していきます。
記事URLをコピーしました