grep命令:

 grep [OPTIONS] PATTERN [FILE...]


--color[=WHEN], --colour[=WHEN]

auto

always

never

例子:grep --color=auto "root" /etc/passwd


-o: 只显示被模式匹配到的内容

-i: ignore case,不区分字符大小写

-v: 显示不能够被模式匹配到的行

-E:使用扩展的正则表达式

-A #:显示符合匹配条件的行及其下面#行(#表示数字)

-B #:显示符合匹配条件的行及其上面#行

-C # 显示符合匹配条件的行及其上下各#行

在正则表达式中的元字符:

        字符匹配:

                .:匹配任意单个字符

                []:匹配指定范围内的任意单个字符

                [^]:匹配指定范围外的任意单个字符

                [0-9]或[[:digit:]]:匹配任意数字

                [^0-9]或[^[:digit:]]匹配非数字的任意字符

                [a-z]或[[:lower:]]匹配为小写字母的字符串

                [A-Z], [[:upper:]]匹配为大写字母的字符串

                [[:space:]]匹配空白字符串

                [[:punct:]]匹配所有标点符号

                [0-9a-zA-Z], [[:alnum:]]匹配所有字母和数字

                [a-zA-Z], [[:alpha:]]匹配所有字母

次数匹配:在期望匹配字符后面提供一个控制符,用于表达匹配其前面字符指定的次数

*  : 任意长度,表示0次、1次或多次;

"ab*c"

abbc, ac

abb, 

.*: 任意长度的任意字符

工作于贪婪模式

\?:0次或1次;表示其左侧字符可有可无

"ab\?c"

abbc,

ac, abc

\+: 1次或多次;表示其左侧字符至少出现1次;

"ab\+c"

ac,

abc, abbbbc

\{m\}:m次;表示其左侧字符精确出现m次;

\{m,n\}:至少m次,至多n次;

ab\{2\}c

ac, abc, abbbc

abbc

ab\{0,3\}c

ac, abbbc,

abbbbbc

\{0,n\}:至多n次;

\{m,\}:至少m次;

位置锚定:

^: 锚定行首

^PATTERN

$: 锚定行尾

PATTERN$


^PATTERN$:用模式来匹配整行;

# grep "^[[:space:]]*$" /etc/rc.d/rc.sysinit

^$: 匹配空白行;


单词锚定:由非特殊字符组成的连续的字符串


\< :锚定词首,也可用\b

\<PATTERN, 或\bPATTERN

# grep "\<sh" /etc/passwd


\> :锚定词尾,也可以用\b

PATTERN\>, 或PATTERN\b


\<PATTERN\>:匹配PATTERN能匹配到的整个单词


分组:\(\)

新建一个名称为a的文件 输入以下内容          

He like his lover.

He like his liker.

She love her lover.

She love her liker.

she llove her liker

she slike his liker

she like his like

she love her love

[root@localhost test]# grep --color "\b\(l..e\).*\1\>" b

she like his like

she love her love

练习:

1、显示/proc/meminfo文件中以大写或小写S开头的行;用两种方式;

# grep "^[sS]" /proc/meminfo

# grep -i "^s" /proc/meminfo

# egrep "^(s|S) /proc/meminfo


2、显示/etc/passwd文件中其默认shell为非/sbin/nologin的用户;

# grep -v "/sbin/nologin$" /etc/passwd | cut -d: -f1


3、显示/etc/passwd文件中其默认shell为/bin/bash的用户;

# grep "/bin/bash$" /etc/passwd | cut -d: -f1


4、找出/etc/passwd文件中的一位数或两位数;

# grep "\<[0-9]\{1,2\}\>" /etc/passwd

# grep "\<[[:digit:]]\{1,2\}\>" /etc/passwd

# egrep --color "\<([0-9]|[1-9][0-9])\>" /etc/passwd


(附加题)找出/etc/passwd文件中的所有数字

# egrep --color "\<[[:digit:]]+\>"


5、显示/boot/grub/grub.conf中以至少一个空白字符开头的行;

# grep "^[[:space:]]\+" /boot/grub/grub.conf


6、显示/etc/rc.d/rc.sysinit文件中以#开头,后面跟至少一个空白字符,而后又有至少一个非空白字符的行;

# grep "^#[[:space:]]\+[^[:space:]]\+" /etc/rc.d/rc.sysinit



7、打出netstat -tan命令执行结果中以‘LISTEN’,后或跟空白字符结尾的行;

# netstat -tan | grep "LISTEN[[:space:]]*$"


8、添加用户bash, testbash, basher, nologin (此一个用户的shell为/sbin/nologin),而后找出当前系统上其用户名和默认shell相同的用户的信息;

# grep "^\([[:alnum:]]\+\>\).*\1$" /etc/passwd