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能夠分爲幾個部分:

匹配字符或者字符串

截取文檔中的某一段

條件操做符

數學運算

內置變量

相關文章
相關標籤/搜索