文本查找工具有:grep egrep fgrep 

grep 

#grep 搜索项 文件

#grep --color=auto  ^redhat  /etc/passwd

  元字符:

     ^ 行首锚定符 字符前

     $ 行尾锚定符 字符尾

     \<字符 词前锚定符

     \>字符 词尾锚定符

     . 任意单个字符

     * 匹配此前字符的任意次

     .*匹配任意长度的任意字符 贪婪模式 尽可能长的匹配符合模式的字符串

     ?匹配此前的字符01

     \mn\}匹配此前的字符至少m次,至多n

     # grep  "a\14\文件  查找文件中出现字符aaaaaaaaaa

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

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

     \(\)   \1, \2, \3

     #grep  --color=auto  "\(mage[dm]u\).*\1\.com" 文件

练习:

查找如下字符串中形如XXX.XXX.XXX.XXX的字符串,其中X必须是数字

    abc.111.222.333

    12a.333.444.567

    11.222.333.444

    111.2.333.333

    444.444.222.111

grep --color=auto "[0-9]\{3\}\.[0-9]\{3\}\.[0-9]\{3\}\.[0-9]\{3\}" digit.txt

grep -E --color=auto "([[:digit:]]{3}\.){3}[[:digit:]]{3}" digit.txt

查找当前系统上名字为user1的用户的帐号的相关信息, /etc/passwd, user11, myuser1

grep --color=auto "^user1:" /etc/passwd

grep --color=auto "^user1\>" /etc/passwd

查找当前系统上以其为附加组的用户有两个或两个以上的组的相关信息, /etc/group, :,

grep --color=auto "[^:]*:[^:]*:[^:]*:[[:alnum:]]\{1,\},.*" /etc/group

grep -E --color=auto "([^:]*:){3}([[:alnum:]]*,){1,}" /etc/group

查找当前系统上其用户帐号密码最长使用期为99999天的用户帐号的相关信息;99999

grep --color=auto "[^:]*:[^:]*:[^:]*:[^:]*:99999:" /etc/shadow

分析/etc/inittab文件中如下两行的文本特征,请写出可以精确找到类似两行的模式,而且要求每一行中出现在数字必须相同:

     l1:1:wait:/etc/rc.d/rc 1

     l5:5:wait:/etc/rc.d/rc 5

grep --color=auto "l\[15]\):\1wait:/etc/rc.d/rc [[space]]\1" /etc/inittab

显示/proc/meminfo文件中以不区分大小的s开头的行;

grep --color=auto "^[sS].*" /proc/meminfo

显示/etc/passwd中以nologin结尾的行;

grep --color=auto ".*nologin$"/etc/passwd 

显示/etc/inittab中以#开头,且后面跟一个或多个空白字符,而后又跟了任意非空白字符的行;

grep --color=auto "^#[[space]]\{1,\}[^[space]]\{1,\}" /etc/inittab

显示/etc/inittab中包含了:一个数字:(即两个冒号中间一个数字)的行;

grep --color=auto ":[0-9]:" /etc/inittab

显示/boot/grub/grub.conf文件中以一个或多个空白字符开头的行;

grep --color=auto "^[[space]]\{1,\}" /boot/grub/grub.conf

显示/etc/inittab文件中以一个数字开头并以一个与开头数字相同的数字结尾的行;

grep --color=auto "^\([0-9]\).*\1" /etc/inittab

grep

--color={auto|always}

-v 取相反

-i 忽略字母大小写

-r 在指定目录下递归搜索多个文件

-B # 在匹配的的当前行也显示前#

    -A # 在匹配的的当前行也显示后#

    -C # 在匹配的的当前行也显示前后#

    -o 只显示匹配的本身

-E 是扩展正则表达式

    \(\) ==> ()

    \{\} ==> {}

     |  或者

     + 1次或任意次

检测IP地址:

IP不含255

\<([1-9]|[1-9][0-9]|1[0-9]{2}|2[01][0-9]|22[0-3])(\.([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-4])){2}(\.([1-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-4]))\>

IP地址包含255

\<([1-9]|[1-9][0-9]|1[0-9]{2}|2[0-1][0-9]|22[0-3])(\.([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])){3}\>

若还是不够清楚可以打开下面的链接继续学习:

 

http://deerchao.net/tutorials/regex/regex.htm