9.1、9.2、9.3、9.4、9.5、9.6、9.7
一、正则
1、grep 过滤指定关键词,关键词需要用 '' 单引号引起来。
grep -r:
操作部分:
创建grep 目录
[root@localQt ~]# mkdir grep
[root@localQt ~]# ls
anaconda-ks.cfg grep
进入grep目录
[root@localQt ~]# cd grep/
copy一个文件到grep目录下
[root@localQt grep]# cp /etc/passwd .
[root@localQt grep]# ls
passwd
[root@localQt grep]# pwd
/root/grep
过滤passwd 文件中的nologin是用颜色标记出来的
[root@localQt grep]# grep 'nologin' passwd
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
games:x:12:100:games:/usr/games:/sbin/nologin
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
nobody:x:99:99:Nobody:/:/sbin/nologin
dbus:x:81:81:System message bus:/:/sbin/nologin
polkitd:x:999:998:User for polkitd:/:/sbin/nologin
avahi:x:70:70:Avahi mDNS/DNS-SD Stack:/var/run/avahi-daemon:/sbin/nologin
avahi-autoipd:x:170:170:Avahi IPv4LL Stack:/var/lib/avahi-autoipd:/sbin/nologin
postfix:x:89:89::/var/spool/postfix:/sbin/nologin
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
which查看grep
[root@localQt grep]# which grep
alias grep='grep --color=auto'
/usr/bin/grep
grep -c: 查看文件行数
[root@localQt grep]# grep -c 'nologin' passwd
15
grep -n :查看行号
[root@localQt grep]# grep -n 'nologin' passwd
2:bin:x:1:1:bin:/bin:/sbin/nologin
3:daemon:x:2:2:daemon:/sbin:/sbin/nologin
4:adm:x:3:4:adm:/var/adm:/sbin/nologin
5:lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
9:mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
10:operator:x:11:0:operator:/root:/sbin/nologin
11:games:x:12:100:games:/usr/games:/sbin/nologin
12:ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
13:nobody:x:99:99:Nobody:/:/sbin/nologin
14:dbus:x:81:81:System message bus:/:/sbin/nologin
15:polkitd:x:999:998:User for polkitd:/:/sbin/nologin
16:avahi:x:70:70:Avahi mDNS/DNS-SD Stack:/var/run/avahi-daemon:/sbin/nologin
17:avahi-autoipd:x:170:170:Avahi IPv4LL Stack:/var/lib/avahi-autoipd:/sbin/nologin
18:postfix:x:89:89::/var/spool/postfix:/sbin/nologin
19:sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
grep -nv:
[root@localQt grep]# grep -vn 'nologin' passwd
1:root:x:0:0:root:/root:/bin/bash
2:bin:x:1:1:bin:/bin:/sbin/Nologin
6:sync:x:5:0:sync:/sbin:/bin/sync
7:shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
8:halt:x:7:0:halt:/sbin:/sbin/halt
grep -i :不区分大小写
将passwd 第二行nologin的n改为N。
在n后面加i,可以显示第二行信息
[root@localQt grep]# grep -ni 'nologin' passwd
2:bin:x:1:1:bin:/bin:/sbin/Nologin
3:daemon:x:2:2:daemon:/sbin:/sbin/nologin
4:adm:x:3:4:adm:/var/adm:/sbin/nologin
5:lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
grep -v 取反,显示除nologin的信息
[root@localQt grep]# grep -vni 'nologin' passwd
1:root:x:0:0:root:/root:/bin/bash
6:sync:x:5:0:sync:/sbin:/bin/sync
7:shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
8:halt:x:7:0:halt:/sbin:/sbin/halt
grep -r :遍历所有子目录
[root@localQt grep]# grep -r 'root' /etc/
只要包括root的都显示出来
如果不加- r:
[root@localQt grep]# grep 'root' /etc/
grep: /etc/: 是一个目录
可以针对目录下的文件过滤文件中的root
grep -A2 :后面跟数字过滤出符合要求的行以及下面的N行
grep -B :后面跟数字过滤出符合要求的行以及上面的N行
二、grep 具体用法
[root@localQt grep]# grep '[0-9]' passwd
[ ] 表示方括号里的任意一个字符0-9是一个区间
加-v 显示不包含数字的行 [root@localQt grep]# grep -v '[0-9]' passwd
显示以#号开头的行
[root@localQt grep]# grep -n '^#' /etc/inittab
-n:
[root@localQt grep]# grep -n '[^0-9]' /etc/inittab
[root@localQt grep]# grep -n '^[^0-9]' /etc/inittab
相反的
[root@localQt grep]# grep -n '^[^0-9]' /etc/inittab
特殊符号:‘.’ 任意的一个字符
[root@localQt grep]# grep 'r.o' passwd
特殊符号 '*' : 表示*左边的字符重复零个或多个
[root@localQt grep]# grep 'o*o' passwd
特殊符号'.*':表示任意一个字符
[root@localQt grep]# grep '.*' passwd
[root@localQt grep]# grep 'var.*mail' passwd
特殊花括号 ‘{ }’:括号的数字表示前面字符的重复范围
[root@localQt grep]# grep 'o\{2\}' passwd
也可以:[root@localQt grep]# egrep 'o{1}' passwd
egrep 与 grep - E相同
花括号前面的字符可以用(),表示一个整体,使用小括号 必须用 :grep - E
特殊符号'+':加号前面的字符1次或多次
[root@localQt grep]# grep 'o\+o' passwd
grep 'o\+o' :\脱意
egrep grep -E
本质区别egrep不需要加脱意字符
特殊符号'?'表示?前面的字符的重复次数为0或1
特殊符号'|':表示或者
不区分大小写 加i:[root@localQt grep]# grep -Ei 'root|var' passwd
grep/egrep命令
grep命令:过滤出指定关键字的行;
格式:grep [参数] ‘字符’ filename
grep -n 显示符号要求的行,并显示行号
grep -c 打印符合要求的行数
grep -v 打印不符合要求的行,取反的意思
grep -r 会把目录下的所有文件全部遍历;-r针对的是目录,如果不加-r只能针对文件
grep -i 忽略大小写
grep -A2 打印符合要求的行以及下面两行
grep -B2 打印符合要求的行以及上面两行
grep -C2 打印符合要求的行以及上下两行
grep -w 匹配一个完整的单词
grep -E 特殊符号脱意==egrep
centos7中自带 --color显示颜色 ;
grep 跟特殊符号的话,要用单引号
grep --include 包含
grep -l 只打印出含有匹配字符串的文件名,不输出具体匹配行的数据
grep/egrep示例:
grep -n 'root' test.txt
grep -nv 'nologin' test.txt
grep '[0-9]'/etc/inittab
grep -v '[0-9]'/etc/inittab
grep '[^0-9]' inittab #非0-9 只要不是一个数字 ,方括号里面的反义 取反非的意思
grep '^[^0-9]' inittab #以什么开头 以一个什么字母开头 非数字 外面是开头 里面就是非
grep -v '^#' /etc/inittab #号开头的行
grep -v '^#' /etc/inittab|grep -v '^$'
grep '^[^a-zA-Z]' test.txt #非a-Z 方括号里面的反义 取反非的意思
grep 'r.o' test.txt #任意的一个字符
grep 'oo*' test.txt
grep '0*0' passwd #左边的0开始 0到N次
grep '.*' test.txt #匹配所有字符
grep 'o{2}' /etc/passwd #o花括号
grep -E 'o{2}' passwd #前面一个字符的重复范围 ! o花括号2 代表出现2次o
egrep 'o{2}' /etc/passwd #和上面道理一样
egrep 'o+' /etc/passwd
grep 'o\+o' passwd #加号表示 +号前面这个字符1次或者多次
egrep 'o+o' passwd #和上面一样
egrep 'oo?' /etc/passwd
grep 'o\?l' passwd #有的时候就是ol 没有的时候就l 表示0个或者1个前面的字符
grep 'root\|nologin' passwd # root 或者 nologin \ 拖意
egrep 'root|nologin' /etc/passwd # 和上面一样
grep 'root\|nologin\|ftp' passwd # 和上面一样 再多一个 或者
grep -i 'root\|nologin\|ftp' passwd # 和上面一样 再加了一个不区分大小写
egrep '(oo){2}' /etc/passwd #一个组合oo
[0-9]:这里的方括号,表示方括号里面的任意一个字符;只要有一个数字,不管是几,就算符合要求。
二、sed工具
创建一个sed目录
[root@localQt ~]# mkdir sed
进入sed目录,将grep目录下的passwd 拷贝过来重命名为pw.txt
[root@localQt sed]# cp ../grep/passwd pw.txt
sed的功能: sed 替换指定的字符
sed匹配指定的字符
[root@localQt sed]# sed '/root/'p pw.txt
如果不需要显示无关的 加'-n'
同样支持:# sed -n '/r.t/'p pw.txt、# sed -n '/r*t/'p pw.txt
如不想脱意 : sed -nr 类似于 grep -E
sed 使用 { }、|
sed打印指定的行
打印第4行到最后一行用'$'
[root@localQt sed]# sed -n '8,$'p pw.txt
sed -e 可以匹配多个字符
# sed -e '1'p -e '/bus/'p -n pw.txt
sed命令比grep更强大,除了拥有查找功能外,还拥有替换功能
sed命令格式:sed -n 'n'p filename ,单引号内的n是数字,表示第几行;
sed 可以实现grep的大部分功能 ,但是不显示颜色
sed -n 是打印符合条件的行,p是print打印的意思
sed -r 脱义(去除特殊符号本身的意义,使其代表特殊意义)
sed -e 进行多次命令,和;效果一行
sed '/[0-9]'d 2.txt d表示删除不包含数字的行;不是真正的删除,是不显示,相当于grep -v 取反
sed -n '/root/'Ip I 不区分大小写
sed -i ' [0-9]'d 2.txt -i 是真正删除掉文档里面不包含数字的行;一半不建议使用。
正则中 | 表示或者,并且要sed两次表示
sed -r 's/([^:]+):(.*):([^:]+)/\3:\2:\1/' 1.txt 以:为分割符,将第一段和最后一段互相替换,\1表示第一个()内容,\2表示第二个()内容,\3表示第三个内容。
sed -r 's/(.*)/aaa:&/g' 1.txt
三 、 awk
awk也是流式编辑器,针对文档中的行和段进行操作 awk可以分为几个部分:
匹配字符或者字符串
截取文档中的某一段
条件操作符
数学运算
内置变量