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

9.一、9.二、9.三、9.四、9.五、9.六、9.7centos

1、正则bash

一、grep 过滤指定关键词,关键词须要用 '' 单引号引发来。ssh

  grep -r:编辑器

操做部分:工具

建立grep 目录post

[root@localQt ~]# mkdir grep
[root@localQt ~]# ls
anaconda-ks.cfg  grepcentos7

进入grep目录 
[root@localQt ~]# cd grep/spa

copy一个文件到grep目录下3d

[root@localQt grep]# cp /etc/passwd .
[root@localQt grep]# ls
passwdblog

[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行

2、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]:这里的方括号,表示方括号里面的任意一个字符;只要有一个数字,无论是几,就算符合要求。
 

2、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能够分为几个部分:

匹配字符或者字符串

截取文档中的某一段

条件操做符

数学运算

内置变量

相关文章
相关标签/搜索