[root@shell01 shell13]# grep -E 'root|nginx|mysql|www' passwd萬用字元及特殊符號 * #所有 . #當前目錄 .. #當前目錄的上級目錄 - #當前目錄的上一次所在的目錄 ~ #家目錄 # #註釋,超級管理員的命令列提示符 $ #引用變數,普通使用者的命令列提示符 ? #匹配任意一個字元,必須是一個 ! #非,取反 [] #匹配中括號中任意一個字元 {} #生成序列,整體 [^] #排除中括號中所有字元 `` #優先執行反引號裡面的命令 $() #優先執行裡面的命令 && #前面一個命令執行成功,才會執行後面的命令 || #簽名的命令執行失敗,才會執行後面的命令 | #管道,將前面的命令的輸出結果交給管道後面的命令 \ #跳脫字元,取消一些特殊字元的含義 & #將程式放到後臺執行 正規表示式 注意事項: 正則神坑 中文字元 正則符號 基礎正則 擴充套件正則 RE BRE ERE ^ #開頭 $ #結尾 ^$ #空行(有空格或tab鍵不算空行) \ #跳脫字元 . #任意一個字元,除了換行符 [] #匹配中括號中的任意一個字元 [^] #匹配[^]之外的所有字元 [a-z] #匹配所有小寫字母 [0-9] ? #匹配前面的字元出現0次或者1次 #擴充套件 * #匹配前面的字元出現0次或者0次以上 + #匹配前面的字元出現1次或者1次以上 #擴充套件 .* #所有 () #整體,後向引用,建立一個用於匹配的字串 #擴充套件 {n} #n數字,前面的字元出現n次 #擴充套件 {n,} #前面的字元至少出現n次 #擴充套件 {n,m} #前面的字元出現至少n次,最多m次 n<m #擴充套件 {,m} #前面的字元最多出現m次 #擴充套件 | #或者 #擴充套件 特定的字元 [[:upper:]] 所有大寫字母 [[:lower:]] 所有小寫字母 [[:alpha:]] 所有字母 [[:space:]] 所有空白字元 [[:digit:]] 所有數字 [[:alnum:]] 所有字母和數字 [[:punct:]] 所有特殊符號 grep #三劍客老三 過濾 過濾出來的內容是有顏色 [root@shell01 shell13]# alias alias egrep='egrep --color=auto' alias fgrep='fgrep --color=auto' alias grep='grep --color=auto' 選項: -i #忽略大小寫 -v #排除 -n #顯示過濾出來的內容所在檔案的行號 -c #將過濾出來的內容進行統計 -w #精確匹配 -o #只顯示過濾出來的內容 -E #支援擴充套件正則 -r #遞迴過濾 -R #遞迴過濾 -A #顯示過濾出來的內容及向下多少行 -B #向上 -C #向上向下各多少行 #準備檔案 cp /etc/passwd ./ #過濾以什麼開頭的行 [root@shell01 shell13]# grep '^root' passwd root:x:0:0:root:/root:/bin/bash #過濾以什麼為結尾的行 [root@shell01 shell13]# grep 't$' passwd halt:x:7:0:halt:/sbin:/sbin/halt #過濾出空行,並列印行號 -n顯示行號 [root@shell01 shell13]# grep -n '^$' passwd #匹配任意一個字元,不匹配空行 [root@shell01 shell13]# grep '.' passwd #匹配所有行,包括空行 [root@shell01 shell13]# grep '.*' passwd # 取消特殊含義,匹配以.結尾行 [root@shell01 shell13]# grep '\.$' passwd #匹配中括號中的任意一個字元,a開頭或者c開頭 [root@shell01 shell13]# grep '^[ac]' passwd adm:x:3:4:adm:/var/adm:/sbin/nologin cdm:x:3:4:adm:/var/adm:/sbin/nologin #以ac開頭,加不加括號都行 [root@shell01 shell13]# grep '^(ac)' passwd #排除中括號中的任意一個字元,排除a或者c開頭 [root@shell01 shell13]# grep '^[^ac]' passwd root:x:0:0:root:/root:/bin/bash bin:x:1:1:bin:/bin:/sbin/nologin daemon:x:2:2:daemon:/sbin:/sbin/nologin #統計出檔案中所有字母出現的次數,次數從大到小進行排列 # -o只顯示過濾出來的內容 uniq -c去重統計 [root@shell01 shell13]# grep -o '[a-Z]' passwd |sort |uniq -c|sort -rn 101 n 84 o 73 s #統計出檔案中所有單詞出現的次數,次數從大到小進行排列 #+號是擴充套件正則,需要用-E [root@shell01 shell13]# grep -Eo '[a-Z]+' passwd |sort |uniq -c|sort -rn 26 sbin 24 x 20 nologin 10 var #+和*的區別之處 [root@shell01 shell13]# grep 'a*' passwd root:x:0:0:root:/root:/bin/bash bin:x:1:1:bin:/bin:/sbin/nologin daemon:x:2:2:daemon:/sbin:/sbin/nologin [root@shell01 shell13]# grep -E 'a+' passwd root:x:0:0:root:/root:/bin/bash 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 #*和?的區別 [root@shell01 shell13]# grep -Eo 'a*' passwd a aaa [root@shell01 shell13]# grep -Eo 'a?' passwd a a #過濾出passwd檔案中數字為2位或者3位的數字 #這裡用w精確匹配, {}是擴充套件正則,要用-E [root@shell01 shell13]# grep -Ew '[0-9]{2,3}' passwd 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 #匹配數字位數出現2次 [root@shell01 shell13]# grep -Ew '[0-9]{2}' passwd #匹配數字出現5次以上 [root@shell01 shell13]# grep -Ew '[0-9]{5,}' passwd #前面的數字最多匹配2次,可以匹配0次 [root@shell01 shell13]# grep -Ew '[0-9]{,2}' passwd [root@shell01 shell13]# grep -Ew '[0-9]{0,2}' passwd #過濾檔案中以r開頭的行,忽略大小寫 [root@shell01 shell13]# grep -i '^r' passwd root:x:0:0:root:/root:/bin/bash [root@shell01 shell13]# grep '^[rR]' passwd #()號是一個整體,當中用|才是或 [root@shell01 shell13]# grep -E '^(r|R)' passwd #過濾出檔案中包含root nginx mysql www等字串 [root@shell01 shell13]# grep -E 'root|nginx|mysql|www' passwd #過濾出檔案中以root nginx mysql www開頭的行 [root@shell01 shell13]# grep -E '^root|^nginx|^mysql|^www' passwd [root@shell01 shell13]# grep -E '^(root|nginx|mysql|www)' passwd #取IP地址 [root@shell01 shell13]# ifconfig |grep -E '[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}' -o #檔案中匹配出正確的身份證號碼 [root@shell01 shell13]# grep -Ew '[0-9]{17}[0-9x]{1}' id.txt
三劍客的老二 擅長替換 流編輯器 非互動式的編輯器 Sed的工作原理 sed命令按照行進行處理內容。處理檔案時,首先會將第一行取出放在一個緩衝區,這個緩衝區我們稱之為模式空間。 sed進行處理。如果行匹配處理完成之後將之輸出到螢幕,如果行不匹配,將之丟棄。接著處理下一行。同樣的操作,直到檔案結束。檔案的內容其實並沒有改變。如果想真正的改變,需要加上-i選項。 sed是可以同時處理多個檔案的。 sed的語法: sed [選項] command files sed正則使用,和grep相差不大 sed使用擴充套件正則時,需要使用-r選項 Sed的命令示例: 選項: 增刪改查 -n #取消預設輸出 -i #修改檔案內容 -r #支援擴充套件正則 -e #多項編輯 Sed 的內部命令 a #追加 i #插入(在上面追加) p #列印 d #刪除 s #替換 g #全域性 c #在當前行位置進行替換 ! #取反 = #顯示行號 i #忽略大小寫 瞭解 n #讀入下一行,從下一行命令進行處理(N為上一行) h #把模式空間的內容重定向到暫存緩衝區 H #把模式空間裡的內容追加到暫存緩衝區 g #取出暫存緩衝區的內容,將其複製到模式空間,覆蓋原處的內容 G #取出暫存緩衝區的內容,將其複製到模式空間,追加到原處的內容的後面 #輸出第三行 (預設會輸出所有內容,-n取消預設輸出) [root@shell01 shell13]# sed -n '3p' /etc/passwd daemon:x:2:2:daemon:/sbin:/sbin/nologin #輸出2-10行 [root@shell01 shell13]# sed -n '2,10p' /etc/passwd daemon:x:2:2:daemon:/sbin:/sbin/nologin #刪除2-10行 [root@shell01 shell13]# sed -n '2,10d' /etc/passwd #刪除第2行到結尾 [root@shell01 shell13]# sed -n '2,$d' /etc/passwd #在第三行下面追加oldboy內容 [root@shell01 shell13]# sed -i '3a oldboy' passwd #在第三行上面追加alex [root@shell01 shell13]# sed -i '3i alex' passwd #把第五行替換為lidao [root@shell01 shell13]# sed '5c lidao' passwd #找lp列印出來 [root@shell01 shell13]# sed -n '/lp/p' passwd #在lp行下把spool換成alex (-n取消預設輸出,就要有p,否則沒有輸出了) [root@shell01 shell13]# sed -n '/lp/s#spool#alex#gp' passwd lp:x:4:7:lp:/var/alex/lpd:/sbin/nologin #匹配root行,刪除root行的下一行(沒用) (換成N就是上一行) [root@shell01 shell13]# sed '/root/{n;d}' passwd #替換匹配root行的下一行(沒用) [root@shell01 shell13]# sed '/root/{n; s/bin/oldboy/}' passwd #將第一行寫入暫存區,替換最後一行內容 [root@shell01 shell13]# sed '1h;$g' /etc/hosts #將第一行寫入暫存區,在最後一行呼叫暫存區的內容 [root@shell01 shell13]# sed '1h;$G' /etc/hosts #將第一行的內容刪除但保留至暫存區,在最後一行呼叫暫存區內容追加到尾部 [root@shell01 shell13]# sed -r '1{h;d};$G' /etc/hosts #將第一行的內容寫入暫存區,從第二行開始往下全部替換 [root@shell01 shell13]# sed -r '1h;2,$g' /etc/hosts #將第一行重定向到暫存區,2-3行追加到暫存區,最後追加呼叫暫存區的內容 [root@shell01 shell13]# sed -r '1h; 2,3H; $g' /etc/hosts #示例: #把定時任務裡的時間同步註釋 [root@shell01 shell13]# sed -n '/ntpdate/s#^##gp' /var/spool/cron/root [root@shell01 shell13]# sed -n '/ntpdate/s/^/#/gp' /var/spool/cron/root #把第二行註釋 [root@shell01 shell13]# sed -n '2s/^/#/gp' /var/spool/cron/root #把第二行到結尾註釋 [root@shell01 shell13]# sed -n '2,$s/^/#/gp' /var/spool/cron/root #將第2行到第6行前面新增#註釋符 &為追加的意思 [root@shell01 shell13]# sed -r '2,6s/.*/#&/' passwd