8-28 正则表达命令详解及练习
(一)grep:正则表达式 grep: Global search REgular expression and Print out the line. 元字符:字符不表示其字面意义,而用于表示通配或控制功能; 分两类: 语法格式:grep [OPTIONS] PATTERN [FILE...]: -v:显示模式匹配不到行;
基本正则表达式的元字符: [:lower:]:所有小写字母 [:upper:]:所有大写字母 [:alpha:]:所有字母 [:alnum:]:所有数字和字母 [:digit:]:所有数字 [:space:]:所有空白字符 [:punct:]:所有标点符号
次数匹配:用于要指定其次数的字符的后面; ?:0或1次; +:1或多次; .*: 匹配任意长度的任意字符; 位置锚定: 分组:() 分组的小括号中的模式匹配到的内容,会在执行过程中被正则表达式引擎记录下来,并保存内置的变量中;这些变量分别是1,2,... 后向引用:使用变量引用前面的分组括号中的模式所匹配到的字符;
(二)扩展的正则表达式:egrep 如下: ?: 0次或1次; 分组:()
练习: 1.显示/etc/passwd文件中以bash结尾的行; 正则表达式: #grep ‘(bash)&;’/etc/passwd 扩展正则表达式 #egrep ‘(bash)&;’/etc/passwd 2.显示/etc/passwd文件中的两位数或三位数; 正则表达式:#grep -o '[0-9]{2,3}' /etc/passwd 扩展正则表达式:# egrep -o '[0-9]{2,3}' /etc/passwd
3.显示‘netstat?tan ’命令结果中以‘LISTEN’后跟0个、1个或多个空白字符结尾的行; 正则表达式:# netstat -tan|grep '(LISTEN)[[:space:]]?+' 扩展正则表达式:# netstat -tan|egrep '(LISTEN)[[:space:]]?+' 4.添加用户bash,testbash,basher以及nologin用户(nologin用户的shell为/sbin/nologin);而后找出/etc/passwd文件中用户名同shell名的行; 正则表达式:# grep '^(.*):.*1$'/etc/passwd 扩展正则表达式:# egrep '^(.*):.*1$'/etc/passwd 扩展正则表达式练习题: 1.显示当前系统上root、centos或user1用户的默认shell和UID; # egrep '^(root):|(centos):|(user1):' /etc/passwd |cut -d:-f3,7 2.找出/etc/rc.d/init.d/functions文件中某单词(单词中间可以存在下划线)后面跟着一组小括号的行; 正则表达式:# grep'([[:alpha:]]+_*[[:alpha:]]+)()'/etc/rc.d/init.d/functions 扩展正则表达式:#egrep'([[:alpha:]]{1,}_{0,}[[:alpha:]]{1,})()' /etc/rc.d/init.d/functions 3.使用echo输出一个路径,而后egrep找出其路径基名; 进一步地:使用egrep取出其目录名 取基名: #echo /etc/init.d/functions | egrep --color=auto -o '[[:alnum:]]+$' #echo /etc/init.d/functions/ | egrep --color=auto -o '[[:alnum:]]+/?$' 取路径名 # echo /etc/init.d/functions |egrep --color=auto -o '^.*+/' 4.找出ifconfig命令执行结果中1-255之间的数字 #ifconfig | egrep --color=auto -o "/<[1-9]|[1-9][0-9]|1[0-9][0-9]|2[0-5][0-5]/>" (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |