正则表达式在GREP使用的方法和技巧
正则表达式在GREP使用的方法和技巧 1、 正则表达式的基本概念 Grep 是查找的一个基本命令 文本处理工具: 根据用户指定的文本模式,对目标文件进行逐行搜索,并显示匹配。 正则表达式是一类字符所书写的模式,其中许多字符不表示其字面意义,而是表达控制或通配等功能。 2、正则表达式分类: 基本正则表达式和扩展正则表达式 基本正则表达式 grep [OPTIONS] PATTERN [FILE... 元字符: 字符匹配: .:匹配任意字符 .*:任意长度的任意字符 []:匹配范围内的字符 如[0-9],------表示0到9中的任意一个字符 字符集合: [:space:]表示任意空白字符 [:punct:] 所有的标点符号 [:lower:]所有小写字母 [:upper:]所有大写 [:digit:]所有数字 [:alnum:]所有数字和字母 [:alpha:]所有字母 次数匹配:用于指定其面前的字符所能够出现的次数 *:任意长度,它面前的字符可以出现任意次;例如:x*y ?:0次或1次,它前面的字符是可有可无的;例如:x?y {m}:m次,它前面的字符可以出现m次; {m,n}:至少m次,至多n次 {m,}:至少m次 {0,n}:至多n次 位置锚定符号: ^:行首设定, $:行尾设定, ^$:空白行 &;:词首 &;:词尾
分组字符: ():分组字符---分组默认编号为自左而后编号 #:引用第n个括号所匹配到的内容,而非模式本身; 如:(abc)(123)* 12 ----这里的引用1引用为(abc)的内容;2引用为(123)的内容
例如: 1、在一个qq库中提出8-11位的QQ号码有那些? grep "&;[0-9]{8,11}&; " qq 2、例如:提取a.txt中出现一位单位数的行 grep "&;[0-9]{1,}&;" /home/a.txt
3、显示/etc/passwd文件中默认shell为/bin/bash的用户 4、显示/boot/grub/grub.conf中以至少一个空白字符的行
5、添加用户bash,sync,halt,而找出当前系统上其用户名和默认shell相同的用户 grep "^([[:alnum:]]{1,}):.*1$"/etc/passwd 6、在/etc/inittab中显示以#号开头后跟至少2个空白字符的行
扩展正则表达式: grep [OPTIONS] [-e PATTERN | -f FILE] [FILE...] 字符匹配: .:任意字符 []: [^]:内容取反如:非空白字符开头的行―[^[:space:]] 次数匹配: *:任意次 ?:0或1次 +:至少一次 {m}:精确匹配每次 {m,n}:至少m次,最多n次 {m,}:至少出现m次 {0,n}:最多出现n次 位置锚定:设置要搜索的位置 ^:行首锚定 $:行尾锚定 ---如^$表示空白行 &;:词首锚定 &;:词尾锚定 分组设定: ():括起来的内容以组的形式,依次匹配 #:引用: 1,2,3 (abc)(123)* 12 ----这里的引用1引用为(abc)的内容;2引用为(123)的内容 |:或者 a|b:a或者b
7、显示当前系统上root、bash或user1 用户的默认shell grep?E "^(root|bash|user1):" /etc/passwd 8、找出/etc/rc.d/init.d/functions文件中某单词后跟一组小括号“()”行; grep -o -E "&;[[:alpha:]]+&;().*" /etc/rc.d/init.d/functions 9、使用echo命令输出一个路径,而后使用grep取出其基名; echo "/etc/passwd" | grep -o -E "[[:alnum:]]+/?" 10、找出ifconfig命令结果中的1-255之间的数字 ifconfig | grep -o -E"&;[1-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5]&;" 11、写一个模式,能匹配合理的IPV4地址; (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |