1.grep程序
linux下有文本处理三剑客 -- grep sed awk
grep:文本 行过滤工具
sed:文本 行编辑器(流编辑器)
awk:报告生成器(做文本输出化格式化)
grep
包含三个命令:grep egrep fgrep,它们是用来进行模式()匹配的
grep用法:
grep [option]...PATTERN[fiename]
grep的常见选项 -- optio
-E 支持使用扩展的正则表达式(ERE)(regexp)
-P 使用perl语言的正则表达式引擎进行搜索(每一种语言的正则表达式引擎都不相同,甚至sed grep awk使用的regexp引擎也不相同)
-i 忽略大小
-v 进行反选
-o 仅仅输出匹配的内容
--color=auto 语法着色
-n 显示行号
-w 匹配固定的单词
PATTERN--正则表达式
作用:通过一些特殊字符,来表示一类字符内容,然后交给前面的命令来执行;如果使用特殊
字符本身含义,就需要来进行转译
-回顾:文件通配符(globbing)
* ?[][ ^]
1.字符匹配
. 任意一个字符 ?
[ ]范围内的任意一个字符
[ ^]范围外的任意一个字符
字符类:[:digit:][:alnum:] [ :alpha:] [:lower:] [:upper:] [:space:] [:punct:]
2.次数匹配
*匹配前面的字符0次到无数次
?匹配前面的字符0次到一次
+匹配前面的字符1次到n次
{m,n}匹配前面的字符m次到n次
{0,n}匹配前面的字符0次到n次
{m,}匹配前面的字符至少m次
3.位置锚定
^铆钉首行
$锚定行尾
铆钉词首,和锚定词尾
>锚定词尾
<锚定词首
< oot> rooter
4.分组
abc* abcccc abc我们要看看成一个整体
() 示例:(abc)* abcabcabc abcccc
**分组特性:默认情况下,Linux系统会分组指定变量,变量的表示形式123...
( ( 立秋 )已过 ),(香港)依旧不宁
练习
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 //匹配固定单词
<[0-9]{2,3}>
[0-9]{2,3}
6.显示/etc/rc.d/rc.sysinit文件中,至少以一个空白字符开头的且后面为非空白字符的行
grep '' ^[[:space:]] +.*[^[:space:]] $'' /etc/rc.d/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