grepは文字列を検索するコマンドで、避けては通れないコマンドです
1 |
grep [option] <検索パターン> <ファイル名> |
<ファイル名>から<検索パターン>に一致する行を出力します。ともあれ、実際の挙動を見てみましょう。
1 2 3 |
$ grep bash /etc/passwd root:x:0:0:root:/root:/bin/bash initial:x:1000:1000:,,,:/home/initial:/bin/bash |
grepには様々なオプションがあります。こちらのサイトにまとめてありますが、いくつか紹介したいと思います
マッチした行番号を表示したいとき
1 |
grep -n <Pattern> <File> |
1 2 3 4 |
$ grep -n PS1 /etc/bash.bashrc 7:[ -z "$PS1" ] && return 19:# but only if not SUDOing and have SUDO_PS1 set; then assume smart user. 20:if ! [ -n "${SUDO_USER}" -a -n "${SUDO_PS1}" ]; then 21: PS1='${debian_chroot:+($debian_chroot)}\u@\h:\w\$ ' |
大文字と小文字を区別しないとき
1 |
$ grep -i <Pattern> <File> |
1 2 3 4 |
$ grep system /etc/passwd systemd-network:x:100:102:systemd Network Management,,,:/run/systemd:/usr/sbin/nologin systemd-resolve:x:101:103:systemd Resolver,,,:/run/systemd:/usr/sbin/nologin systemd-timesync:x:102:104:systemd Time Synchronization,,,:/run/systemd:/usr/sbin/nologin |
1 2 3 4 5 |
$ grep -i system /etc/passwd gnats:x:41:41:Gnats Bug-Reporting System (admin):/var/lib/gnats:/usr/sbin/nologin systemd-network:x:100:102:systemd Network Management,,,:/run/systemd:/usr/sbin/nologin systemd-resolve:x:101:103:systemd Resolver,,,:/run/systemd:/usr/sbin/nologin systemd-timesync:x:102:104:systemd Time Synchronization,,,:/run/systemd:/usr/sbin/nologin |
マッチしない行を出力
1 |
$ grep -v <Pattern> <File> |
文字列 bashを含まない行を出力
1 2 3 4 5 6 |
$ grep -v bash /etc/passwd daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin bin:x:2:2:bin:/bin:/usr/sbin/nologin sys:x:3:3:sys:/dev:/usr/sbin/nologin sync:x:4:65534:sync:/bin:/bin/sync games:x:5:60:games:/usr/games:/usr/sbin/nol |
パイプラインで別コマンドの結果をgrepで検索
他のフィルタと同様に、grepも対象のファイルを指定しない場合は、標準入力から読み込みます。次の例では、lsコマンドの結果をgrepで検索しています。
lsコマンドでsnapディレクトリがあるか確認
1 2 |
ls / |grep snap snap |
スポンサードサーチ
まとめ
今回はgrepコマンドについて紹介しました。次回紹介する正規表現で多用するコマンドなので、オプションも含めて覚えておきましょう。
コメントを残す