正規表現で grep 検索を便利に

いろいろと検索するときに使える
grep コマンドですが、オプションや正規表現を使えば
さらに便利になります
とくに、設定スクリプトをつくりたいときに使っています
まずは、文字の検索です
grep “探したい文字” ファイル名
これで、ファイルのなかから任意の文字をさがせます
例えば
SELinuxの設定を無効にするため、
enforcing という場所がどこにあるかをみるには
grep “enforcing” /etc/sysconfig/selinux
で見れます
ただし、該当する行が全部でます
実行結果は
# enforcing – SELinux security policy is enforced.
# permissive – SELinux prints warnings instead of enforcing.
SELINUX=enforcing
となりました
“” で囲んであるのは、*などのメタキャラを含む場合に
シェルに展開されないようにするためです
続いて -c オプションをつけて、該当する行がいくつあるか数えます
今回は SELINUX とかかれている行の数を表示します
grep -c “SELINUX” /etc/sysconfig/selinux
4
これで該当するのは4行ということがわかりました
また、OR検索をするには
-e オプションをつけます
これはいくつか連続してできますが、絞り込みにはなりません
例えば
enforcing と SELINUX を含む行をだすには
grep -e “SELINUX” -e “enforcing” /etc/sysconfig/selinux
としますが
絞り込めていません
両方のうち、どちらかを含む行がでてきます
# SELINUX= can take one of these three values:
# enforcing – SELinux security policy is enforced.
# permissive – SELinux prints warnings instead of enforcing.
SELINUX=enforcing
# SELINUXTYPE= can take one of these two values:
SELINUXTYPE=targeted
このため、絞り込みをするには、一度 grep で検索した結果を
パイプでさらに検索すれば絞り込み可能になります
grep “SELINUX” /etc/sysconfig/selinux | grep “enforcing”
これで
SELINUX=enforcing
となり、目的どおりの絞り込みができました
さらに -n オプションをつければ、行をしらべ
sed コマンドで簡単に書き換えできます
このときに注意するのは
最初のgrep コマンドで -n オプションをつけてから
絞りこみするということです
正解:$ grep -n “SELINUX” /etc/sysconfig/selinux | grep “enforcing”
7:SELINUX=enforcing
誤り:$ grep “SELINUX” /etc/sysconfig/selinux | grep -n “enforcing”
2:SELINUX=enforcing
このように、後にオプションをつけると行が変わってしまうのは
絞り込んだあとで行を数えているからです
このため。本来なら原文の7行めになるはずが
絞り込んだら2行めなので、2行めと表示
というようになってしまいます
sed などで一気に改造したいときには、調べるときに
こういった順番の誤差に気をつけましょう

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です