2018-11-11 预习笔记 正则 grep、sed、awk

9.1、9.2、9.3、9.4、9.5、9.6、9.7

一、正则

202e1d55ee971b5b122b3e3d4aa51fa53fb.jpg

1、grep 过滤指定关键词,关键词需要用 '' 单引号引起来。

  grep -r:

dc83864c10e4bb352b9b7ab5849c4a87277.jpg

操作部分:

创建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。

4facf666bea0dba32959ca3c18cafb2f2ff.jpg

50c30decd37b37557167e74aae6b5723210.jpg

在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的都显示出来
0c209e056e38f104fdabcec7e5650b39415.jpg


cd3004550af697d179fee65a455acf92a57.jpg

如果不加- r:

[root@localQt grep]# grep 'root' /etc/
grep: /etc/: 是一个目录

可以针对目录下的文件过滤文件中的root

66bad542876e7b6ebecf4b347f2b5d7e3eb.jpg

grep -A2 :后面跟数字过滤出符合要求的行以及下面的N行

93b331e4a61505a6132e2a71ea6ae34dec0.jpg

grep -B :后面跟数字过滤出符合要求的行以及上面的N行

8cecc7459824871ca4fcd3943d7dceed9fb.jpg

二、grep 具体用法

5b20028cf519abd59ab82d409feb0ea7a62.jpg

[root@localQt grep]# grep '[0-9]' passwd

 [ ] 表示方括号里的任意一个字符0-9是一个区间

bd169fab2632329bd53f930b2b373158141.jpg

加-v 显示不包含数字的行  [root@localQt grep]# grep -v '[0-9]' passwd 

 

    显示以#号开头的行

[root@localQt grep]# grep -n '^#' /etc/inittab
47d3f59ac9e01667d75b42d8db8fc64cbe8.jpg

   -n:

[root@localQt grep]# grep -n '[^0-9]' /etc/inittab
bc375c9e95550ba3c2e3808bc8cb3fdde42.jpg

[root@localQt grep]# grep -n '^[^0-9]' /etc/inittab
294f35ca44111a543d9abc162e3a2d46356.jpg

相反的

[root@localQt grep]# grep -n '^[^0-9]' /etc/inittab

特殊符号:‘.’  任意的一个字符

[root@localQt grep]# grep 'r.o' passwd
9bd4a267002e022eb6c0f5f8194a1f5403e.jpg

   特殊符号 '*'   : 表示*左边的字符重复零个或多个 

[root@localQt grep]# grep 'o*o' passwd3804d7167a15e5f83a4b21c9f861903c1de.jpg

特殊符号'.*':表示任意一个字符

[root@localQt grep]# grep '.*' passwd
12eb794a4b8f967a46d2ec30adad7bf2570.jpg

[root@localQt grep]# grep 'var.*mail' passwd
26c025223b11dbc15f462dffc4e300c6b4f.jpg

  特殊花括号 ‘{ }’:括号的数字表示前面字符的重复范围

[root@localQt grep]# grep 'o\{2\}' passwd
ba8310b2e62bd76b1b6af5ef76197317e66.jpg

也可以:[root@localQt grep]# egrep 'o{1}' passwd
5fdec33b09d9ade9007f52ace4de1ff38de.jpg
    egrep  与  grep - E相同

847e8a08d6f459aabd0d0c9accb33575c06.jpg

花括号前面的字符可以用(),表示一个整体,使用小括号 必须用 :grep - E

a26d02644e649c9eef6c355073bd7692dbe.jpg

特殊符号'+':加号前面的字符1次或多次

[root@localQt grep]# grep 'o\+o' passwd
813f3578659b846e9ab1b0c9269a4a45a69.jpg

grep 'o\+o'  :\脱意

egrep  grep -E

本质区别egrep不需要加脱意字符

特殊符号'?'表示?前面的字符的重复次数为0或1

1e95bed76715aa6d0cdefece736a8bebba4.jpg

特殊符号'|':表示或者

ae33234b8a4c2b14c765a15e3c4a27a86ae.jpg

不区分大小写 加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工具

bd8b8da4da529bb153e7da4c1f8a24e142e.jpg

创建一个sed目录

[root@localQt ~]# mkdir sed
进入sed目录,将grep目录下的passwd 拷贝过来重命名为pw.txt

[root@localQt sed]# cp ../grep/passwd   pw.txt

557c043dfad1b0cf79f370de6210089cccc.jpg

 sed的功能: sed 替换指定的字符

   sed匹配指定的字符

[root@localQt sed]# sed '/root/'p pw.txt

8d75362b6fb6795dde36c4c97801f53e169.jpg

如果不需要显示无关的 加'-n'

157c64d80be7fd1d9f33ef8cb92cc0e63be.jpg

同样支持:# sed -n '/r.t/'p pw.txt、# sed -n '/r*t/'p pw.txt

如不想脱意 :    sed -nr  类似于 grep -E

4644d39d745a1d5c4f550dfc5648d2cd5a4.jpg

  sed 使用  { }、| 

1103642cd675a5cafb7bc52f9d9d898b444.jpg

c8cc245eacdd3e266b7b408ad1f8f1f83cf.jpg

 sed打印指定的行

37e2b52a01838154757943cf8a1d07bf62c.jpg

 打印第4行到最后一行用'$'

[root@localQt sed]# sed -n '8,$'p pw.txt
cd38c8aa27ca925ab55061349b3cde16bea.jpg

sed  -e 可以匹配多个字符

# sed -e '1'p -e '/bus/'p -n pw.txt 

238dbc3e50f346af34691c66ffe29987136.jpg


 

 

 

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可以分为几个部分:

匹配字符或者字符串

截取文档中的某一段

条件操作符

数学运算

内置变量

 

转载于:https://my.oschina.net/u/3991930/blog/2874812

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值