先に結論
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)"
このファイルのが何の設定化は不明です。が、ちゃんとコメント行と空行以外が取得できています。
以上。
コメントを書く