[Linux] grep でコメント行と空行以外をconfファイルから取得する

[Linux] grep でコメント行と空行以外をconfファイルから取得する

先に結論

cat [ファイル] | grep -vE '^\s*$' | grep -vE '^\s*#'

cat しなくても grep だけでもできます。

grep -vE '^\s*$' [ファイル] | grep -vE '^\s*#'

お好きなほうをどうぞ。

grep コメント行と空行を無視して取得したい

Linux の設定(conf)ファイルにはたいていコメントで説明やサンプル設定が書いてあったり、空行があったりして純粋に設定値だけを確認したい場合には見づらいです。

そんな時は設定(conf)ファイルを grep して余計なコメント行や空行を削除した状態で表示できればうれしいです。grep -v オプションを使用することで、条件に一致しない行だけを抽出できます。なのでこれを使用すればよいです。

grep -v

-v はマッチしない行を表示します。ヘルプで確認してみると以下のようにあります。

$ grep --help | grep -- -v
  -v, --invert-match        select non-matching lines

空行とコメント行以外にマッチする grep

複数の条件にマッチする grep をしたい場合は、パイプで2回の grep をつなげばよいです。

  • grep -vE '^\s*$': 0文字以上の空白文字のみで構成された行以外
  • grep -vE '^\s*#': 0文字以上の空白文字の後にコメントが続く行以外

-E は拡張正規表現を使用するためのオプションで、この例ではなくても問題ありません。

上記の grep をパイプでつないで「コメント行以外」と「空行以外」という条件の AND 条件とします。

例えば /etc/adduser.conf という設定ファイルを対象に空行とコメント行以外を grep します。

$ cat /etc/adduser.conf | grep -vE '^\s*$' | grep -vE '^\s*#'
DSHELL=/bin/bash
DHOME=/home
GROUPHOMES=no
LETTERHOMES=no
SKEL=/etc/skel
FIRST_SYSTEM_UID=100
LAST_SYSTEM_UID=999
FIRST_SYSTEM_GID=100
LAST_SYSTEM_GID=999
FIRST_UID=1000
LAST_UID=59999
FIRST_GID=1000
LAST_GID=59999
USERGROUPS=yes
USERS_GID=100
DIR_MODE=0755
SETGID_HOME=no
QUOTAUSER=""
SKEL_IGNORE_REGEX="dpkg-(old|new|dist|save)"

このファイルのが何の設定化は不明です。が、ちゃんとコメント行と空行以外が取得できています。

以上。

Linuxカテゴリの最新記事