03、grep与正则表达式
1、grep程序 Linux下有文本处理三剑客 -- grep sed awk grep:文本 行过滤工具 sed:文本 行编辑器(流编辑器) awk:报告生成器(作文本输出格式化) ? grep 包含三个命令:grep egrep fgrep,它们是用来进行 行模式(pattern)匹配的 ? egrep = gerp -E //使用扩展的正则表达式进行匹配 fgrep = fast grep //只使用文件通配符进行匹配 *grep默认使用正则表达式进行文本匹配* grep的用法:
grep的常见选项 -- option -E 支持使用扩展的正则表达式(ERE)(regexp) -P 使用perl语言的正则表达式引擎进行搜索(每一种语言的正则表示式引擎都不相同,甚至sed grep awk使用的regexp引擎也不相同) -i 忽略大小 -v 进行反选 -o 仅仅输出匹配的内容(默认输出的是匹配到的行) --color=auto 语法着色 -n 显示行号 -w 匹配固定的单词
PATTERN--正则表达式 回顾:文件通配符(globbing) 1、字符匹配 ((立秋)已过),(香港)依旧不宁。多区出现非法集会,(暴力)示威者破坏公物、堵塞干道,或以激光、砖块袭警、投掷汽油弹,更有甚者公然殴打内地游客及记者。随着示威升级,怂恿“反中乱港”的幕后势力也正慢慢浮现。 示例:(ab+(xy)*) 其中 1 = ab+(xy)*,2 = xy 补充一下:扩展的正则表达式 练习: 1、显示/proc/meminfo文件中大小s开头的行 grep -i "^s" /proc/meminfo 2、显示/etc/passwd文件中不以/bin/bash结尾的行 grep -v "/bin/bash$" /etc/passwd
3、显示/etc/passwd文件中UID号最大的用户的用户名 sort -n -t: -k3 /etc/passwd | tail -1 | cut -d: -f1 4、如果用户root存在,显示其默认的shell程序 grep "^root&;" /etc/passwd &> /dev/null && grep "^root&;" /etc/passwd | cut -d: -f7 id root &> /dev/null && grep "^root&;" /etc/passwd | cut -d: -f7 5、找出/etc/passwd中的两位或三位数 grep "[0-9]{2,3}" /etc/passwd
-w //匹配固定单词
&;[[:digit:]]{2,3}&; b[0-9]{2,3}b 6、显示/etc/rc.d/rc.sysinit文件中,至少以一个空白字符开头的且后面为非空白字符的行 grep "^[[:space:]]+.*[^[:space:]]$" /etc/rc.d/rc.sysinit 7、找出”netstat -tan”命令的结果中,以“LISTEN”后跟0、1或多个空白字符结尾的行 netstat -tan | grep "LISTEN[[:space:]]*$"
8、添加用户bash、testbash、basher以及nologin(其shell为/sbin/nologin):而后找出/etc/passwd文件中用户名同shell名的行 useradd bash /bin/bash useradd testbash useradd basher useradd -s /sbin/nologin nologin grep "(^[[:alnum:]]+&;).*1$" /etc/passwd
9、IP地址如何匹配? ip地址: 0-255.0-255.0-255.0-255
0-255
2 0-4 0-9 2[0-4][0-9] 2 5 0-5 25[0-5] 1 0-9 0-9 1[0-9][0-9] 0 0-9 0-9 [0-9][0-9] 0 0 0-9 [0-9] grep -owE "((([0-9])|([1-9][0-9])|(1[0-9]{2})|(2[0-4][0-9])|(25[0-5]))[.]){3}(([0-9])|([1-9][0-9])|(1[0-9]{,2})|(2[0-4][0-9])|(25[0-5])){1}[[:space:]]"
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |