目录
一、grep
扩展用法: grep -E = egrep
grep的文本匹配
基本用法 | grep 匹配条件 处理文件 |
grep root passwd | #过滤文件passwd中的root关键字 |
grep -i root passwd | #省略大小写 |
grep -E "\<root" passwd | #root之前不能有字符 |
grep -E "root\>" passwd | #root之后不能有字符 |
grep -数字 | #显示过滤行以及上面和下面几行 |
grep -n | #显示匹配的行所在行号 |
grep -A5 | #显示过滤行及下面5行 |
grep -B3 | #显示过滤行及上面3行 |
grep -v | 反向过滤 |
grep的字符数量匹配规则
注意:涉及到通配符时,必须使用<egrep>或者<grep -E>命令才能识别
^westos | 以westos开头 | w....s | w开头s结尾中间四个任意字符 |
westos$ | 以westos结尾 | .....s | s结尾前5个任意字符 |
* | 字符出现任意次 | ? | 字符出现0到1次 |
+ | 字符出现1次以上 | { n } | 字符出现n次 |
{ m , n } | 字符出现m到n次 | { 0 , n } | 字符出现0到n次 |
{ , n } | 字符最多出现n次 | { m , } | 字符最少出现m次 |
(lee){ 2 } | lee字符串出现2次 |
二、sed
命令用法
sed 参数 命令 处理对象
sed 参数 处理对象 -f 处理规则文件
对字符的处理
p——显示
sed -n 5p westos | #显示第五行 |
sed -n 3,5p westos | #显示第3到5行 |
sed -ne "3p;5p" westos | #显示第3和5行 |
sed -ne 1,5p westos | #显示1-5行 |
sed -ne '5,$p' westos | #显示第五行以后 |
sed -n '/^#/p' fstab | #显示以#开头的行 |
d——删除
sed 5d passwd | #删除第五行 |
sed '/^#/d' fstab | #删除以#开头的行 |
sed '/^UUID/!d' fstab | #除了UUID开头的行都删除 |
a——添加
sed -e '$a hello world' fstab | #在fstab文件的最后一行添加hello world |
sed -e '$a hello\nworld' fstab | #在fstab文件的最后一行添加hello\nworld |
sed -e '/^#/a hello world' test | #在以#开头的行的下一行添加hello world |
c——替换
sed -e '/^#/c hello world' fstab | #所有#开头的行都替换为hello world |
sed -e '5c hello world' fstab | #第五行替换为hello world |
w——把符合条件的行重新写入到新文件中
#把fstab中以UUID开头的行重定向到fstab_new文件中
sed '/^UUID/w fstab_new' fstab
i——插入
#在第五行之前插入hello,插入后,被插入的内容为第五行
[root@shell_1 test]# sed '5i hello' test
r——整合文件
[root@shell_1 test]# cat test
1
3
4
#1
#3
[root@shell_1 test]# cat test1
2
[root@shell_1 test]# sed '1r test1' test #在test文件的第一行后插入test1文件的内容
1
2
3
4
#1
#3
替换:
<sed -n '$=' fstab>: 可以用来统计文件的总行数
<sed '1rlinux2' linux1>:把linux2中的内容加到linux1的第一行后。
<sed '/1/rlinux2' linux1>:把linuxn1中的内容加到linux1中每个字符“1”的后边
字符替换:
练习及脚本
Apache_port.sh
此脚本接入数字
http的端口就改为此数字
假设selinux为关闭状态
例如:
sh Apache_port.sh
ERROR: Pleaase input port number following script !!
sh Apache_port.sh 8080
apache的端口会被修改为8080
三、awk
开头打印“westos”,打印第二列,结尾打印“end”
统计所有行数;统计包含“bash”的行数;打印符合第七列为“bash”的列并统计符合条件的行数;打印不包含bash的行并统计行数。
打印含有“bash”或者“nologin”的行并统计符合条件的行数。
打印开头是root并且结尾是bash的行,并统计符合条件的数目。
打印第一行所有的列;打印第二行所有的列;打印行号;打印列号。
寻找第7列是bash的并打印所有的列;寻找第7列不是bash的并打印所有的列
练习:
统计在系统中能su切换的、并且用户家目录不在/home下的用户数量。
“\”表示转义字符,否则“/home”中的“/会被认定为”
四、本章总结:
1、grep命令中:涉及到通配符时,必须使用<egrep>或者<grep -E>命令才能识别