FC2ブログ

正規表現で 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 などで一気に改造したいときには、調べるときに
こういった順番の誤差に気をつけましょう


スポンサーサイト



テーマ : Linux
ジャンル : コンピュータ

コメント

非公開コメント

最新記事
検索フォーム
GREEハコニワ攻略サイト
リンク
カテゴリ
月別アーカイブ
フリーエリア
最新記事
FXプライムレート
最新コメント
最新トラックバック