文本查找工具有:grep egrep fgrep
grep
#grep 搜索项 文件
#grep --color=auto ^redhat /etc/passwd
元字符:
^ 行首锚定符 字符前
$ 行尾锚定符 字符尾
\<字符 词前锚定符
\>字符 词尾锚定符
. 任意单个字符
* 匹配此前字符的任意次
.*匹配任意长度的任意字符 贪婪模式 尽可能长的匹配符合模式的字符串
?匹配此前的字符0或1次
\{m,n\}匹配此前的字符至少m次,至多n次
# grep "a\{1,4\}" 文件 查找文件中出现字符a,aa,aaa,aaaa
[] 匹配指定范围内的任意单个字符
[^] 匹配指定范围外的任意单个字符
\(\) \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]\):\1:wait:/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