文本搜索工具-正则表达式grep,egrep的使用解析
本文中主要介绍了linu系统下grep命令、正则表达式的基本参数和使用格式、方法: grep的理解: 文本搜索工具,根据用户指定的文本模式对目标文件进行逐行搜索,显示能够被模式所匹配到的行; grep (global search regular expression(RE) and print out the line,全面搜索正则表达式并把行打印出来)是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹配的行打印出来; egrep命令是一个搜索文件获得模式,使用该命令可以任意搜索文件中的字符串和符号,也可以为你搜索一个多个文件的字符串,一个提示符可以是单个字符、一个字符串、一个字、一个句子; fgrep 命令搜索 File 参数指定的输入文件(缺省为标准输入)中的匹配模式的行。fgrep 命令特别搜索 Pattern 参数,它们是固定的字符串。如果在 File 参数中指定一个以上的文件 fgrep 命令将显示包含匹配行的文件。 功能说明:查找文件里符合条件的字符串 命令格式: grep [options] ‘PATTERN’ file,… 基本正则表达式: 正则表达式就是一类字符所书写出的模式(pattern),来处理字符串的方法,它是以行为单位来进行字符串的处理行为,正则表达式通过一些特殊称号的辅助,可以让用户轻易达到查找、删除、替换某特定字符串的处理程序。 1. grep 常用选项:
有时会要用到管道 | 吆!! 下面是 常用选项 应用举例: 1).查看/etc/fstab文件中以非#号开头的行--># grep -v "^#" /etc/inittab
2).搜索/etc/passwd文件中字所有行中为-->root的关键字:--># grep -o "root" /etc/passwd
3).搜索/etc/passwd文件中字符以为root的关键字:-->grep -i "^root" /etc/passwd
4).搜索出以 shhd 的行,并列出行号:--># grep -n "sshd" /etc/passwd
5).搜索没有shhd的行,并输出行号 :--># grep -nv 'shhd' /etc/passwd
6).搜索匹配ftp下面的1行:--># grep -A 1 "ftp" /etc/passwd
7).显示匹配sshd上面的1行:--># cat /etc/passwd|grep -B 1 sshd
8).显示匹配ftp上下各一行以及本行:-->#
元字符:不表示字符本身的意义,用于额外功能性的描述 2. 字符匹配: . :匹配任意单个字符; 下面是 字符匹配 应用举例: 1).匹配/etc/passwd文件下的所有以r开头t结尾的用户:--># grep "r..t" /etc/passwd
2).匹配以小写字母(数字、大写字母)开头的行:--># grep -n '^[A-Z]' /etc/passwd
3).匹配xiaoma.txt中的所有数字并将其显示出来:--># grep [[:digit:]] xiaoma.txt
4).搜索xiaoma.txt文件中除了数字以外的字符显示出来:--># grep --color=auto "[^[:digit:]]" xiaoma.txt
3. 次数匹配: {m,}: 至少m次; 下面是 次数匹配 应用举例: 1).查找/etc/man.config文件中包含com且o出现0次或0次以上的行:--># grep "com*" /etc/man.config
2).查找/etc/man.config文件中包含com的行(贪婪模式):--># grep "com.*" /etc/man.config
3).查找/etc/man.config文件中包含co且m出现0或1次:--># grep 'com?' /etc/man.config
4>查找/etc/man.config文件中包含com且m只出现2次的行:--># grep "com{2}" /etc/man.config
5).查找/etc/man.config文件中包含com且m最少出现一次最多出现4次的行:--># grep "com{1,3}" /etc/man.config
6).查找/etc/man.config文件中包含com且m最少出现一次的行:--># grep "com{1,}" /etc/man.config
7).查找/etc/man.config文件中包含com且m最少出现0次,最多出现5次的行:--># grep "com{0,5}" /etc/man.config
4. 位置锚定:用于指定字符出现的位置 下面是 位置锚定 应用举例: 1).查找/etc/fstab文件中以#开头的行: --># grep "^#" /etc/fstab
2).查找/etc/passwd文件中行尾以bash结尾的用户:--># grep "bash$" /etc/passwd
3).查找/etc/fstab文件中的空白行:--># grep "^$" /etc/fstab 4).查找root且root前面不包含任何字符的行(&; 或b):--># grep "&;root" /etc/passwd
5).查找root且root后面不包含任何字符的行(&;或b):--># grep "root&;" /etc/passwd
5.分组: (): | :或者 基本正则表达式中没有 | (): 如: (ab)*xy 6.引用: 1:前向引用,引用前面的第1个左括号以及与之对应的右括号中的模式所匹配到的内容 2:前向引用,引用前面的第2个左括号以及与之对应的右括号中的模式所匹配到的内容 ... 应用举例: 分组与后向引用共同用: 例子: grep "(a.b).*1" xiaoma.txt 7.egrep 扩展正则表达式 注: 在扩展正则表达式中不需要转义符 元字符: 1)字符匹配: .:任意单个字符 []:指定范围内的任意单个字符 [^]:指定范围外的任意单个字符 2)次数匹配: *:匹配其前面的字符任意次 ?:匹配其前面的字符0次或1次 +:匹配其前面的字符1次或多次 {m}:匹配其前面的字符m次 {m,n}:至少m次,至多n次 {0,n}:至多n次 3)锚定: ^:锚定行首 $:锚定行尾 &;:锚定词首 b &;:锚定词尾 b 4)分组: (): | :或者 基本正则表达式中没有| 5)引用: 1:前向引用,引用前面的第1个左括号以及与之对应的右括号中的模式所匹配到的内容 2:前向引用,引用前面的第2个左括号以及与之对应的右括号中的模式所匹配到的内容 ... 应用举例: 找出命令:ifconfig查询结果中是1-255的整数: # ifconfig | egrep 'b[0-9][0-9]b?|b1[0-9][0-9]b|b2[0-4][0-9]b|b25[0-5]b' --color
下面是一些其他的例子: 1.显示/proc/meminfo文件中以大小写s开头的行; # grep "^[sS]" /proc/meminfo
2、取出默认shell为非bash的用户; # grep -v "bash$" /etc/passwd | cut -d: -f1
3、取出默认shell为bash的且其ID号最大的用户; # grep "bash$" /etc/passwd | sort -n -t: -k3 | tail -1 | cut -d: -f1
4、显示/etc/rc.d/rc.sysinit文件中,以#开头,后面跟至少一个空白字符,而后又有至少一个非空白字符的行; # grep "^#[[:space:]]{1,}[^[:space:]]{1,}" /etc/rc.d/rc.sysinit
5、显示/boot/grub/grub.conf中以至少一个空白字符开头的行; # grep "^[[:space:]]{1,}" /boot/grub/grub.conf
6、找出/etc/passwd文件中一位数或两位数; # grep --color=auto "&;[0-9]{1,2}&;" /etc/passwd
7、找出ifconfig命令结果中的1到255之间的整数; # ifconfig | grep -E --color=auto "&;([1-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])&;"
8、查看当前系统上root用户的所有信息; # grep "^root&;" /etc/passwd
9、添加用户bash和testbash、basher,而后找出当前系统上其用户名和默认shell相同的用户; # grep --color=auto "^([[:alnum:]]{1,})&;.*1$" /etc/passwd
10、取出当前系统上所有用户的shell,要求:每种shell只显示一次,且按升序显示; # cut -d: -f7 /etc/passwd | sort -u
11.挑战题:写一个模式,能匹配真正意义上的IP地址; # ifconfig |grep -A 1 "^eth" |grep "&;[0-9.]{1,} |cut -d: -f2
12.找出命令:ifconfig查询结果中是1-255的整数: #ifconfig | egrep 'b[0-9][0-9]b?|b1[0-9][0-9]b|b2[0-4][0-9]b|b25[0-5]b' --color
欢迎访问小马子的博客!! (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |