grep的使用,正則表達式

文本處理grep
? ? grep :根據模式去搜索文本,并將匹配到的文本顯示出來
pattern(模式):文本字符和正則表達式的元字符組合而成的匹配條件
正則表達式:(REGular EXPression)正則表達式就是處理字符串的方法,通過一些特殊字符的輔助,讓用戶輕松方便的達到查找、刪除、修改特定字符串的處理程序
grep 的用法
? ? name: grep, egrep, fgrep – print lines matching a pattern
? grep [OPTIONS] PATTERN [FILE…]
? ? ? ?grep [OPTIONS] [-e PATTERN | -f FILE] [FILE…]
option:
? –color=auto ? ?匹配到的字符串帶顏色顯示出來(auto的自動附加顏色)
? -i :匹配字符的時候忽略大小寫
? ? ? ? example: grep -i ?“uuid” ?/etc/passwd
? -v : 取反,顯示沒有被匹配到的行
? ? ? example: grep -v ?“uuid” ?/etc/passwd
? -n:顯示匹配的行號
? ? ? ?-c: 統計匹配的行數
? ? ? ?-o: 僅顯示匹配到的字符串,其他不顯示
? ? ? ?-q: 靜默模式,不輸出任何信息(相當于重定向到&>/dev/null)
? ? ? ?-A #: after, 后#行
? ? ? ?-B #: before, 前#行
? ? ? ?-C #:context, 前后各#行 顯示匹配到字符串的前后各#行
? ? ? ?-e:實現多個選項間的邏輯or關系
? ? ? ? ? ?grep –e ‘cat ’ -e ‘dog’ file
? ? ? ?-w:匹配整個單詞
? ? ? ? ? ? example: grep -w bash filename ? (bash 可以匹配 ? basher 匹配不到)
? ? ? ? ? ? ? ?數字,字母,下劃線不可以作為單詞的分隔符(界線)
? ? ? ?-E:使用ERE(grep -E 相當于 egrep)
? ? ? ?-F:相當于fgrep,不支持正則表達式
字符匹配:
? ? ? ?. 匹配任意單個字符
? ? ? ?example: r..t ? ?root,rabt,r12t(字母,數字,符號,相同不相同,只要是兩個) 都可以匹配。
? ? ? ?[] 匹配指定范圍內的任意單個字符
? ? ? ?example: [abcd] 匹配到a或者b或者c或者d
? ? ? ?[^] 匹配指定范圍外的任意單個字符
? ? ? ?example: [^wang]匹配wang之外的字符
? ? ? ?[:alnum:] 字母和數字
? ? ? ?[:alpha:] 代表任何英文大小寫字符,亦即A-Z, a-z
? ? ? ?[:lower:] 小寫字母[:upper:] 大寫字母
? ? ? ?[:blank:] 空白字符(空格和制表符)
? ? ? ?[:space:] 水平和垂直的空白字符(比[:blank:]包含的范圍廣)
? ? ? ?[:cntrl:] 不可打印的控制字符(退格、刪除、警鈴…)
? ? ? ?[:digit:] 十進制數字[:xdigit:]十六進制數字
? ? ? ?[:graph:] 可打印的非空白字符
? ? ? ?[:print:] 可打印字符
? ? ? ?[:punct:] 標點符號
匹配次數:用在要指定次數的字符后面,用于指定前面的字符要出現的次數
? ? ? ?* 匹配前面的字符任意次,包括0次(工作在貪婪模式)
? ? ? ? ? ? 貪婪模式:盡可能長的匹配
? ? ? ?.*任意長度的任意字符
? ? ? ?\?匹配其前面的字符0或1次
? ? ? ?example : ?root\? ?表示匹配其前面的字符也就是t一次或者0次 比如:root ?roo
? ? ? ?\+匹配其前面的字符至少1次
? ? ? ?example : root\+ ?表示匹配t字符至少一次以上,比如:root ?roottt rootttttt
? ? ? ?\{n\}匹配前面的字符n次
? ? ? ?\{m,n\}匹配前面的字符至少m次,至多n次
? ? ? ?\{,n\}匹配前面的字符至多n次
? ? ? ?\{n,\}匹配前面的字符至少n次
? ? 位置錨定:定位出現的位置
? ? ? ?^ 行首錨定,用于模式的最左側
? ? ? ?$ 行尾錨定,用于模式的最右側
? ? ? ?^PATTERN$ 用于模式匹配整行
? ? ? ? ? ?^$ 空行
? ? ? ? ? ?^[[:space:]]*$ 空白行
? ? ? ?\< 或\b詞首錨定,用于單詞模式的左側
? ? ? ?\> 或\b詞尾錨定;用于單詞模式的右側
? ? ? ?\<PATTERN\>匹配整個單詞
分組:\(\) 將一個或多個字符捆綁在一起,當作一個整體進行處理,
? ? ? ? ? ? 如:\(root\)\+,將root作為一個整體使用,root\+ 只是匹配t字符
? ? ? ? ?分組括號中的模式匹配到的內容會被正則表達式引擎記錄于內部的變量中,這些變量的命名方式為: \1, \2, \3, …
? ? ? ? ?\1表示從左側起第一個左括號以及與之匹配右括號之間的模式所匹配到的字符
? ? ? ? ? ? ?示例:\(string1\+\(string2\)*\)
? ? ? ? ? ? ? ? ? ?\1 :string1\+\(string2\)*
? ? ? ? ? ? ? ? ? ?\2 :string2
? ? ? ? 后向引用:引用前面的分組括號中的模式所匹配字符,而非模式本身
練習
? ?1、顯示/proc/meminfo文件中以大小s開頭的行(要求:使用兩種方法)
? ? ? ? grep -i “^s” /proc/meminfo
grep -e ^s -e ^S /proc/meminfo
? 2、顯示/etc/passwd文件中不以/bin/bash結尾的行
? ? ? ? grep -v “/bin/bash$” /etc/passwd
? 3、顯示用戶rpc默認的shell程序
? ? ? ? grep -w “^rpc” /etc/passwd |cut -d: -f7
? 4、找出/etc/passwd中的兩位或三位數
? ? ? ? grep -o “\b[0-9]\{2,3\}\b” /etc/passwd
? 5、顯示CentOS7的/etc/grub2.cfg文件中,至少以一個空白字符開頭的且后面存非空白字符的行
? ? ? ? grep “^[[:space:]]\+[^[:space:]]” /etc/grub2.cfg
? 6、找出“netstat -tan”命令的結果中以‘LISTEN’后跟任意多個空白字符結尾的行
? ? ? ? netstat -tan |grep “LISTEN[[:space:]]*$”
? 7、顯示CentOS7上所有系統用戶的用戶名和UID
? ? ? ? cut -d: -f1,3 /etc/passwd |grep “\b[0-9]\{1,3\}$”
? 8、添加用戶bash、testbash、basher、sh、nologin(其shell為/sbin/nologin),找出/etc/passwd用戶名同shell名的行
? ? ? ? grep “^\(.*\)\>.*\b\1$” /etc/passwd
? ?9、利用df和grep,取出磁盤各分區利用率,并從大到小排序
? ? ? ? df |grep “/dev/sd” |grep -o “[0-9]\{1,3\}%” |grep -o “[0-9]\{1,3\}” |sort
擴展正則表達式 ,egrep
? ? ? egrep = grep -E
?egrep[OPTIONS] PATTERN [FILE…]
? 字符匹配:(用法和grep用法一致)
? ? ? ?. 任意單個字符
? ? ? ?[] 指定范圍的字符
? ? ? ?[^] 不在指定范圍的字符
? ?次數匹配:
? ? ? ?*:匹配前面字符任意次
? ? ? ??: 0或1次
? ? ? ?+:1次或多次
? ? ? {m}:匹配m次
? ? ? {m,n}:至少m,至多n次
? 位置錨定:
? ? ? ?^ :行首
? ? ? ?$ :行尾
? ? ? ?\<, \b :語首
? ? ? ?\>, \b :語尾
? ?分組:
? ? ? ?()
? ? ? ?后向引用:\1, \2, …
? ?或者:(|表示或者,|前后分別是兩個字符,)
? ? ? ? a|b: a或b
? ? ? ? C|cat: C或cat
? ? ? ? (C|c)at:Cat或cat ?(括號表示展開)

本文來自投稿,不代表Linux運維部落立場,如若轉載,請注明出處:http://www.www58058.com/88866

(0)
燕李鵬燕李鵬
上一篇 2017-11-25 11:40
下一篇 2017-11-25 23:10

相關推薦

  • 一鍵編譯安裝httpd服務

    一鍵編譯安裝httpd服務 背景: httpd服務是一個常用的web服務,所以很多地方會用到,這里寫一個一鍵編譯安裝httpd服務的腳本。 環境: 系統:centos6.9和centos7.3(應該所有的6和7的版本都可以使用) httpd源代碼版本:httpd-2.2.34.tar.bz2和httpd-2.4.27.tar.bz2 。下載網址官網:http…

    2017-09-16
  • Linux常見小知識點

    什么是Linux? Linux是一款支持多任務,多線程,多用戶的類Unix系統 Linux常見的發行版本 Redhat  Linux   Linux發行版中比較重要的一個版本,多用于企業,由Redhat公司提供收費技術支持和更新,其衍生版本有centos為免費版本 Debain linux      系統分為…

    Linux干貨 2017-03-26
  • corosync + pacemaker + iscsi實現高可用mysql (下)

    上一篇講的安裝配置iscsi,本章介紹mariadb安裝以及高可用的mysql具體實現 一、安裝配置mariadb [root@SQL1 ~]# tar xf mariadb-5.5.36-linux-x86_64.tar.gz  -C /usr/local \\解壓軟件包 [r…

    Linux干貨 2015-07-09
  • Linux運維之進程管理

    一、進程概念 進程是內核的一個功能,在Linux中,運行一個程序或命令可以出發一個事件而驅動一個PID,在linux系統中,系統只識別二進制程序文件,我們可以通過執行系統上的二進制程序來運行程序,進而產生進程。在linux系統中第一個進程是init程序,它是系統開機第一個加載的程序,用來支撐系統的正常運行的一個程序,內核啟動的一個用戶級進程。   …

    Linux干貨 2016-09-09
  • vsphere虛擬機下的Linux在線移除硬盤后的報錯處理(基于LVM)

    1)故障描述( vmware虛擬機,在線移除一塊被設置為pv格式的硬盤后,提示unknown device錯誤): 說明:/dev/sdb1 /dev/sdc1 /dev/sdd1是組成/dev/vg_test/lvm_test的PV,這里我們模擬/dev/sdd1硬盤被直接斷電了 [root@docker mnt]# pvdisplay…

    Linux干貨 2016-07-29
  • 第九周作業

    1. 寫一個腳本,判斷當前系統上所有用戶的shell是否為可登錄shell(即用戶的shell不是/sbin/nologin);分別這兩類用戶的個數;通過字符串比較來實現; # awk -F: ‘{if($7!=”/sbin/nologin”) {printf “Logined user %s\n”…

    Linux干貨 2017-03-01
欧美性久久久久