GREP命令与正则表达式
文本搜索工具:Grep及正则表达式
*:匹配任意长度的任意字符; ?:匹配任意单个字符; []:指定范围内的任意单个字符;[a-z],所有字母,不区分大小写; [^]:指定范围外的任意单个字符
以行为单位进行文本处理 模式(pattern):以正则表达式的元字符和正常字符组成 grep [OPTIONS] PATTERN [FILE]… --color[=always,auto,never] 效果: grep ?color=auto“root” /etc/passwd aliasgrep=”grep ?color=auto”,可以写到配置文件中,永久保存,位置 /etc/bahsrc; -o:only,只显示被匹配到的行 -i:ignore case,忽略大小写 -v:显示不能被模式匹配到的行 -E:使用扩展的正则表达式; -A #:after,显示匹配到的行及后面#行; -B #:before,显示匹配到的行及前面#行; -C#:context,显示匹配到的行及前后#行
元字符:大部分需要转义 字符匹配: . :匹配任意单个字符; []:匹配指定范围内的任意单个字符 [^]:匹配指定范围外的任意单个字符 字符集: [0-9];[[:digit:]]:数字 [a-z];[[:lower:]]:小写字母; [A-Z];[[:upper:]]:大写字母; [[:space:]]:空格 [[:punct:]]:特殊字符 [0-9a-zA-Z],[[:alnum:]]:数字和字母 [a-zA-Z];[[:aipha:]]:所有字母 次数匹配: *:任意单个字符 .: .* :任意字符 ?:匹配其前面字符0次或1次; +:匹配其前面字符1次或多次(至少一次); {m,n}:匹配其前面字符至少m次,至多n次; {m}:精确匹配其前面字符m次; {0,n}:匹配其前面字符最少0次,最多n次; {m,}:匹配其前面字符最少m次; 位置锚定: ^:句子锚定,锚定句首 $:句子锚定,锚定句尾 ^PATTERN$:匹配整个句子 ^$:空白行 &;,b:单词锚定,锚定词首【不属于转义】【b位于词首,如bro,以ro开头的单词】 &;,b:单词锚定,锚定词尾,【不属于转义】【b位于词尾,如rob,以ro结尾的单词】 &;PATTERN&;:精确匹配单词, PATTERN&;:以PATTERN结尾的单词; &;PATTERN:以PATTERN开头的单词; 分组及后向引用: (PATTERN):分组,匹配整组字符; |:或者 1,2,3…:后向引用,引用前面的第1,2,3个分组 练习: 1、显示/proc/meminfo文件中以大写或小写S开头的行;用两种方式; #grep ?i“^s” /proc/meminfo #grep “^[sS]” /proc/meminfo 2、显示/etc/passwd文件中其默认shell为非/sbin/nologin的用户; #grep?v“nologin$”/etc/passwd 3、显示/etc/passwd文件中其默认shell为/bin/bash的用户; #grep“bash$”/etc/passwd 4、找出/etc/passwd文件中的一位数或两位数; #grep“&;[0-9]{1,2}&;”/etc/passwd #grep“&;[0-9][0-9]?&;”/etc/passwd 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相同的用户的信息; #Useraddbash #Useraddtestbash #Useraddbasher #Useradd?snologinnologin #grep“^([[:alnum:]+]&;).*1$”/etc/passwd
字符匹配: . :任意单个字符 []:范围内的任意单个字符 [^]:范围外的任意单个字符 次数匹配: *:任意单个字符任意次 ?:0或1 次 +:1次或多次 {m,n}:至少m次,至多n次 {m}:m次 {m,}:至少m次 {0,n}至多n次 位置锚定: ^:锚定句首 $:锚定句尾 &;,b:锚定词首 &;,b:锚定词尾 分组及后向引用: (): 1,3…: | :或者,两侧所有内容; abc|Cbaèabc或Cba ab(cC)baèabcba或abCba 练习: 1、显示当前系统上root、fedora或user1用户的默认shell; # grep -E"^(root|fedora|user1)&;" /etc/passwd | cut ?d”:” -f7 2、找出/etc/rc.d/init.d/functions文件中某单词后面跟一组小括号的行,形如:hello(); # grep -o-E "&;[[:alnum:]]+&;()" /etc/rc.d/init.d/functions 3、使用echo命令输出一个绝对路径,使用grep取出其基名;扩展:取出其路径名 #ls /etc/init.d/*|egrep -o "&;[^/]+/?$" 4、找出ifconfig命令结果中的1-255之间数字; #ifconfig | grep -E "&;([1-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])&;" 5、挑战题:写一个模式,能匹配合理的IP地址;
#ifconfig | grep -E "&;([1-9]|[1-9][0-9]|1[0-9]{2}|2[0-3][0-9])&;.[0-9]{1,3}.[0-9]{1,3}" 6、挑战题:写一个模式,能匹配出所有的邮件地址; #grep -o -E"&;([[:alnum:]]{0,}[[:punct:]]{0,}[[:alnum:]]{0,})@([[:alnum:]]{0,}).([[:alnum:]]{0,})&;"
不需要正则时,建议使用。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |