grep egrep區(qū)別
創(chuàng)新互聯(lián)公司是一家專業(yè)的成都網(wǎng)站建設(shè)公司,我們專注成都做網(wǎng)站、成都網(wǎng)站設(shè)計(jì)、網(wǎng)絡(luò)營銷、企業(yè)網(wǎng)站建設(shè),友情鏈接,1元廣告為企業(yè)客戶提供一站式建站解決方案,能帶給客戶新的互聯(lián)網(wǎng)理念。從網(wǎng)站結(jié)構(gòu)的規(guī)劃UI設(shè)計(jì)到用戶體驗(yàn)提高,創(chuàng)新互聯(lián)力求做到盡善盡美。
grep 默認(rèn)不支持?jǐn)U展 但可以通過-E 選擇來支持?jǐn)U展正則
egrep 支持?jǐn)U展正則
關(guān)于正則與擴(kuò)展正則的區(qū)別可以看我另一篇shell 正則的介紹
文件處理順序 以行為單位,逐行進(jìn)行處理
默認(rèn)只輸出與表達(dá)式相匹配的文本行
基本用法
- 格式1:egrep [選擇] '正則表達(dá)式' 文件
- 格式2:前置命令 | egrep [選擇] '正則表達(dá)式'
? egrep命令工具 (擴(kuò)展正則命令)
? 常用命令選項(xiàng)
?grep 正則表達(dá)式,用來查找過濾文檔的工具符號(hào)
grep "root" user //在user文檔中查找有單詞root的行
grep "^root" user //在user文檔中查找以單詞root開頭的行
grep "bash " user //查找空行
grep "^ " user //查找以空格開頭的行
grep "[rot]" user //查找字母r或者o或者t
grep "roo[tn]" user //查找root或者roon
grep "[^rot]" user //查找字母r或者o或者t之外的內(nèi)容
grep "[a-z]" user //查找小寫字母
grep "[A-Z]" user //查找大寫字母
grep "[a-Z]" user //查找所有字母
grep "[0-9]" user //查找數(shù)字
grep "r..t" user //查找以r開頭t結(jié)尾中間有2個(gè)任意字符的單詞
grep "r. " user //查找以r開頭后面任意字符 相當(dāng)手通配符
grep "ro*" user //查找以r開頭后面有或沒有字母o的單詞,o可以出現(xiàn)任意次
grep "o{1,2}" user //查找o出現(xiàn)1次到2次的行
grep "o{2,3}" user //查找o出現(xiàn)2次到3次的行
grep "o{2}" user //查找o出現(xiàn)2次的行
grep "o{1,} " user //查找o出現(xiàn)1次以及1次以上
grep "(:0){2}" user //查找:0(數(shù)字零)連續(xù)出現(xiàn)2次的行
擴(kuò)展正則
egrep "o+" user //查找o出現(xiàn)1次以及1次以上
egrep "o?" user //查找o出現(xiàn)0次或1次
egrep "o{1,2}" user //查找o出現(xiàn)1次到2次的行
egrep "o{2,3}" user //查找o出現(xiàn)2次到3次的行
egrep "o{2}" user //查找o出現(xiàn)2次的行
egrep "o{1,}" user //查找o出現(xiàn)1次以及1次以上
egrep "(:0){2}" user //查找:0(數(shù)字零)連續(xù)出現(xiàn)2次的行
egrep "bash|nologin" user //查找bash或者nologin
egrep "\bthe\b" a //查找單詞the,前后是空格或者特殊符號(hào)
案例:
正則表達(dá)式匹配練習(xí)
1)典型的應(yīng)用場(chǎng)合:grep、egrep檢索文本行
grep命令不帶-E選項(xiàng)時(shí),支持基本正則匹配模式。比如“word”關(guān)鍵詞檢索、“^word”匹配以word開頭的行、“word$”匹配以word結(jié)尾的行……等等。
輸出以“r”開頭的用戶記錄:
輸出以“l(fā)ocalhost”結(jié)尾的行:
若希望在grep檢索式同時(shí)組合多個(gè)條件,比如輸出以“root”或者以“daemon”開頭的行:
而若若使用grep -E或egrep命令,可支持?jǐn)U展正則匹配模式,能夠自動(dòng)識(shí)別 |、{} 等擴(kuò)展正則表達(dá)式中的特殊字符,用起來更加方便,比如:
或者
使用grep -E 與 使用egrep命令完全等效,推薦使用后者,特別是涉及到復(fù)雜的正則表達(dá)式的時(shí)候。
2)grep、egrep命令的-q選項(xiàng)
選項(xiàng) -q 表示 quiet(靜默)的意思,結(jié)合此選項(xiàng)可以只做檢索而并不輸出,通常在腳本內(nèi)用來識(shí)別查找的目標(biāo)是否存在,通過返回狀態(tài) $? 來判斷,這樣可以忽略無關(guān)的文本信息,簡(jiǎn)化腳本輸出。
比如,檢查/etc/hosts文件內(nèi)是否存在192.168.4.4的映射記錄,如果存在則顯示“YES”,否則輸出“NO”,一般會(huì)執(zhí)行:
這樣grep的輸出信息和腳本判斷后的提示混雜在一起,用戶不易辨別,所以可以改成以下操作:
是不是清爽多了,從上述結(jié)果也可以看到,使用 -q 選項(xiàng)的效果與使用 /dev/null的效果類似。
3)基本元字符 ^、$ —— 匹配行首、行尾
輸出注釋的配置行(以#開頭的行):
統(tǒng)計(jì)本地用戶中登錄Shell為“/sbin/nologin”的用戶個(gè)數(shù):
提示: -m10僅在文件的前10行中過濾,后面的行不再過濾。
結(jié)合 -c 選項(xiàng)輸出匹配的行數(shù)
使用 -c 選項(xiàng)可輸出匹配行數(shù),這與通過管道再 wc -l的效果是相同的,但是寫法更簡(jiǎn)便。比如,統(tǒng)計(jì)使用“/bin/bash”作為登錄Shell的正常用戶個(gè)數(shù),可執(zhí)行:
或者
4)基本元字符 . —— 匹配任意單個(gè)字符
以/etc/rc.local文件為例,確認(rèn)文本內(nèi)容:
輸出/etc/rc.local文件內(nèi)的空行(用 –v 選項(xiàng)將條件取反):
5)基本元字符 +、?、 —— 目標(biāo)出現(xiàn)的次數(shù)*
還以/etc/rc.local文件為例:
輸出包括 f、ff、ff、……的行,即“f”至少出現(xiàn)一次:
輸出包括init、initial的行,即末尾的“ial”最多出現(xiàn)一次(可能沒有):
輸出包括stu、stuf、stuff、stufff、……的行,即末尾的“f”可出現(xiàn)任意多次,也可以沒有。重復(fù)目標(biāo)只有一個(gè)字符時(shí),可以不使用括號(hào):
輸出所有行,單獨(dú)的“.*”可匹配任意行(包括空行):
輸出/etc/passwd文件內(nèi)“r”開頭且以“nologin”結(jié)尾的用戶記錄,即中間可以是任意字符:
6)元字符 {} —— 限定出現(xiàn)的次數(shù)范圍
創(chuàng)建一個(gè)練習(xí)用的測(cè)試文件:
輸出包括ababab的行,即“ab”連續(xù)出現(xiàn)3次:
輸出包括abab、ababab、abababab的行,即“ab”連續(xù)出現(xiàn)2~4次:
輸出包括ababab、abababab、……的行,即“ab”最少連續(xù)出現(xiàn)3次:
7)元字符 [] —— 匹配范圍內(nèi)的單個(gè)字符
還以前面的測(cè)試文件bracet.txt為例:
輸出包括abc、abd的行,即前兩個(gè)字符為“ab”,第三個(gè)字符只要是c、d中的一個(gè)就符合條件:
輸出包括大寫字母的行,使用[A-Z]匹配連續(xù)范圍:
8)單詞邊界匹配
以文件/etc/rc.local為例:
輸出包括單詞“init”的行,文件中“initialization”不合要求:
或者:
輸出包括以“l(fā)l”結(jié)尾的單詞的行,使用 匹配單詞右邊界:
或者:
9)多個(gè)條件的組合
通過dmesg啟動(dòng)日志查看藍(lán)牙設(shè)備、網(wǎng)卡設(shè)備相關(guān)的信息:
Linux命令大小寫敏感,一般命令都是小寫
在 Linux 系統(tǒng)中,“l(fā)l”命令并不是它的標(biāo)準(zhǔn)命令,“l(fā)s”才是 Linux 系統(tǒng)的標(biāo)準(zhǔn)命令,其功能是列出當(dāng)前子目錄下的文件(不包括隱藏文件)。
之所以有“l(fā)l”命令,是因?yàn)樵?Linux 系統(tǒng)中有一個(gè)定義別名命令(alias)的功勞。即:
alias ll 'ls -al'
其中:
-a 選項(xiàng)表示列出所有文件(包括隱藏文件)
--all的縮寫,顯示所有的文件,包括隱藏文件(以.開頭的文件)。
l 選項(xiàng)表示按照長格式(long)列出文件名,包括:文件的權(quán)限、文件類型(是文件還是子目錄)、文件的建立日期、文件大小,等等。而這些信息是 ls 命令不能夠顯示出來的。
所以只要定義好了“l(fā)l”,以后輸入該命令后,即可顯示文件的很多信息。
-A --almost-all的縮寫,顯示所有的文件,包括隱藏文件,但不包括表示當(dāng)前目錄.和上級(jí)目錄..這兩個(gè)文件。
跳動(dòng)到第一個(gè)非空位置 ^
下面是我用vim的時(shí)候做的筆記........你可以看一下。
-------------------------------------------------------------
Linux vim 操作快捷鍵
----------------------
1、上k下j左h右l
2、編輯i、a、s
3、視圖v
4、返回普通模式 esc、ctrl+c、ctrl+[
5、執(zhí)行命令 :
6、添加新頁 tabnew 頁面名
7、拷貝 y,p 或者 +y,+p
8、切換頁面 gt、gT (go tab)
9、分割頁面shift+; -(sp 文件名 或 vs 文件名)
10、切換面板ctrl+w(表示進(jìn)入切換狀態(tài))+[h,j,k,l](某一個(gè)就行)
11、保存 w
12、退出 q
13、保存退出 wq
14、全部退出 qa
15、按單詞移動(dòng) w,e,b
16、單行按字符查找 f+字符(;繼續(xù) ,上一個(gè))或者t代替f也可以
17、撤銷 u
18、跳動(dòng)到第一個(gè)非空位置 ^,跳動(dòng)到行尾部$
19、跳動(dòng)到第一個(gè)位置 0
20、按括號(hào)匹配查找 [[ , ]]
21、跳動(dòng)到代碼位置shift + L (尾部), H(gg頭部) , M(中部)
22、跳到指定行 :120
1、正向翻頁 ctrl+f
2、反向翻頁 ctrl+b
3、半屏翻頁 ctrl +d 、 ctrl + u
4、剪切 x, 刪除 d
5、撤銷 u,重做ctrl+r
6、刪除區(qū)間 10,16d(刪除10~16行內(nèi)容,%d刪除全部內(nèi)容)
7、設(shè)置高亮搜索 set hls
8、忽略大小寫搜索 set ic
9、一次搜索多個(gè) \| (如:/main|\max\|swap)
10、查看man : K
11、查看ascii碼值:ga
12、自動(dòng)排版 光標(biāo)移動(dòng)到{位置,切換到可視化模式%=
13、左右縮進(jìn):切換到可視化 ,
14、自動(dòng)補(bǔ)齊: ctrl+n 或者 ctrl+p
lsof全名list opened files,也就是列舉系統(tǒng)中已經(jīng)被打開的文件。我們都知道,linux環(huán)境中,任何事物都是文件,
設(shè)備是文件,目錄是文件,甚至sockets也是文件。所以,用好lsof命令,對(duì)日常的linux管理非常有幫助。
lsof是linux最常用的命令之一,通常的輸出格式為:
引用
常見包括如下幾個(gè)字段:更多的可見manual。
1、COMMAND
默認(rèn)以9個(gè)字符長度顯示的命令名稱??墒褂?c參數(shù)指定顯示的寬度,若+c后跟的參數(shù)為零,則顯示命令的全名
2、PID:進(jìn)程的ID號(hào)
3、PPID
父進(jìn)程的IP號(hào),默認(rèn)不顯示,當(dāng)使用-R參數(shù)可打開。
4、PGID
進(jìn)程組的ID編號(hào),默認(rèn)也不會(huì)顯示,當(dāng)使用-g參數(shù)時(shí)可打開。
5、USER
命令的執(zhí)行UID或系統(tǒng)中登陸的用戶名稱。默認(rèn)顯示為用戶名,當(dāng)使用-l參數(shù)時(shí),可顯示UID。
6、FD
是文件的File Descriptor number,或者如下的內(nèi)容:
(這里很難翻譯對(duì)應(yīng)的意思,保留英文)
引用
文件的File Descriptor number顯示模式有:
引用
7、TYPE
引用
IPv4 IPv4的包;
IPv6 使用IPv6格式的包,即使地址是IPv4的,也會(huì)顯示為IPv6,而映射到IPv6的地址;
DIR 目錄
LINK 鏈接文件
詳情請(qǐng)看manual中更多的注釋。
8、DEVICE
使用character special、block special表示的設(shè)備號(hào)
9、SIZE
文件的大小,如果不能用大小表示的,會(huì)留空。使用-s參數(shù)控制。
10、NODE
本地文件的node碼,或者協(xié)議,如TCP等
11、NAME
掛載點(diǎn)和文件的全路徑(鏈接會(huì)被解析為實(shí)際路徑),或者連接雙方的地址和端口、狀態(tài)等
常用示例:
1.顯示開啟文件/home/oracle/10.2.0/db_1/bin/tnslsnr的進(jìn)程
2.知道22端口現(xiàn)在運(yùn)行什么程序
3.顯示init進(jìn)程現(xiàn)在打開的文件
6.依照文件夾/home/oracle來搜尋,但不會(huì)打開子目錄,用來顯示目錄下被進(jìn)程開啟的文件
顯示內(nèi)容太多了,不顯示了
lsof -n 不將IP轉(zhuǎn)換為hostname,缺省是不加上-n參數(shù)
關(guān)注:
進(jìn)程調(diào)試命令:truss、strace和ltrace
進(jìn)程無法啟動(dòng),軟件運(yùn)行速度突然變慢,程序的"SegmentFault"等等都是讓每個(gè)Unix系統(tǒng)用戶頭痛的問題,而這些問題都可以通過使用truss、strace和ltrace這三個(gè)常用的調(diào)試工具來快速診斷軟件的"疑難雜癥"。