语法: grep  [-cinvABC]  'word'  filename

-c :打印符合要求的行数

-i :忽略大小写

-n :在输出符合要求的行的同时连同行号一起输出

-v :打印不符合要求的行

-A :后跟一个数字(有无空格都可以),例如 –A2则表示打印符合要求的行以及下面两行

-B :后跟一个数字,例如 –B2 则表示打印符合要求的行以及上面两行

-C :后跟一个数字,例如 –C2 则表示打印符合要求的行以及上下各两行


例题:

包含 ‘halt’ 的行以及这行下面的两行都打印出:

grep -A2 'halt' /etc/passwd

包含 ‘halt’ 的行以及这行上面的两行都打印出:

grep -B2 'halt' /etc/passwd

包含 ‘halt’ 的行以及这行上面和下面的各两行都打印出:

grep -C2 'halt' /etc/passwd

过滤出带有某个关键词的行并输出行号:

grep -n 'root' /etc/passwd

过滤不带有某个关键词的行,并输出行号:

grep -nv 'nologin' /etc/passwd

过滤出所有包含数字的行:

grep '[0-9]' /etc/inittab

过滤出所有不包含数字的行:

grep -v '[0-9]' /etc/inittab

把所有以 ‘#’ 开头的行去除:

grep -v '^#' /etc/inittab

去除所有空行和以 ‘#’ 开头的行:

grep -v '^#' /etc/crontab |grep -v '^$'

如何打印出不以英文字母开头的行

grep '^[^a-zA-Z]' test.txt
grep '[^a-zA-Z]' test.txt

过滤任意一个字符与重复字符:

grep 'r..o' /etc/passwd                      . 表示任意一个字符
grep 'ooo*' /etc/passwd                      * 表示零个或多个前面的字符
grep '.*' /etc/passwd |wc -l                ‘.*’ 表示零个或多个任意字符,空行也包含在内

指定要过滤字符出现的次数:

grep 'o\{2\}' /etc/passwd


筛选一个或一个以上前面的字符:

egrep 'o+' test.txt

筛选零个或一个前面的字符:

egrep 'o?' test.txt

筛选字符串1或者字符串2:

egrep 'aaa|111|ooo' test.txt

egrep中( )的应用:

egrep 'r(oo)|(at)o' test.txt                用( )表示一个整体,例如(oo)+就表示1个 ‘oo’                                                               或者多个 ‘oo’