在Linux下正規表示式和grep命令的使用

2021-05-26 11:47:58 字數 2435 閱讀 5804

grep

語法:[root @test /root ]# grep [-acinv] '搜尋字串' filenames-list

引數說明:

-a :將 binary 檔案以 text 檔案的方式搜尋資料

-c :計算找到 '搜尋字串' 的次數

-i :忽略大小寫的不同,所以大小寫視為相同

-n :順便輸出行號

-v :反向選擇,亦即顯示出沒有 '搜尋字串' 內容的那一行!

範例:[root @test /root]# grep 'root' /var/log/secure

搜尋 /var/log/secure 這個檔案中包含 root 的行

[root @test /root]# grep -v 'root' /var/log/secure

搜尋沒有 root 的行

[root @test /root]# grep [a-z]anpath /etc/man.config

說明:grep 是乙個很常見的指令,最重要的功能就是進行字串資料的比對了,需要說明的是『grep 在乙個檔案中查尋乙個字串時,他是以"整行"為單位來資料的擷取的!』

grep 是最簡單的正規表示法搜尋指令之一,他並不支援一些更嚴謹的正規表示法內容,不過,已經相當的好用。

例題一:找出這個檔案裡面含有 know 這個字元,並將行號列出來:注意,大小寫是不一樣的

[root @test /root ]# grep -n 'know' regexp.txt

例題二:找出這個檔案裡面含有 * 這個字元,並將行號列出來:

[root @test /root ]# grep -n '\*' regexp.txt

例題三:我要將所有 know 不論大小寫都列出來,並列出行號:

[root @test /root]# grep -ni 'know' regexp.txt

注意:類似的指令還有egrep、awk、gawk、sed等,將在後面詳細說明

正則表示法的特殊字元(charaters)與 egrep 指令

特殊字元 表示意義

^word 待搜尋的字元在行首

word$ 待搜尋的字元在行尾

. 匹配任何乙個可能的字元

\ 跳脫符號將特殊字元變成普通字元

? 任何乙個『單一』字元

* 匹配模式中重複的字元

[list] 列表中的字元

[range] 列表中範圍內的字元

[^list] 反向選擇,與 [list] 相反

[^range] 反向選擇,與 [range]相反

\ 與前乙個相同字浮連續 n 個

\ 與前乙個相同字浮連續 n-m 個

請特別留意的是,『正規表示法的特殊字元』與一般在指令列輸入指令的『萬用字元』並不相同,例如,在萬用字元當中, * 代表的是 0 ~ 無限多個字元的意思,但是在正規表示法當中, * 則是重複前乙個字元的意思~使用的意義並不相同,不要搞混了!

例題:在 /etc 底下,只要含有 xyz 三個字元的任何乙個字元的那一行就列出來

grep [xyz] /etc/*

例題:我想要知道在 /etc 裡面,只要句首是 w-z 的就將他印出來?

grep ^[w-z] /etc/*

6 diff比較兩個檔案內容是否有不一致的指令!

語法:[root @test /root ]# diff file1 file2

範例:[root @test /root]# diff index.htm index.html

例子:ls –l | grep 『^d』 查詢子目錄

注意:使用規則表示式要養成良好的習慣,就是在匹配模式的兩端加上『』。這樣和shell的檔案萬用字元號做區別

7 充分規則表示式專用字元

符號 執行

pattern1 | pattern2 邏輯或

(patten) 對模式進行分組

char+ 搜尋前面字元的乙個或者多個重複例項

char? 搜尋前面字元的乙個或者0個例項

例題:t+ 匹配乙個或乙個以上連續的t,如t tt ttt

t? 匹配0個或1個t 如 t 或 『 』

「create | stream 「 和兩種模式的任一種進行匹配

重點回顧

• shell檔案匹配字元和規則表示式的區別

shell檔案匹配字元是用於匹配檔名

正規表示法re的用途主要是用來做為『搜尋』字串之用,匹配的檔案裡面的內容和用來過濾特殊訊息等用途;

• 由於嚴謹度的不同,正規表示法之上還有更嚴謹的延伸正規表示法;

• 正規表示法的處理方式,經常是以『整行』或稱為『整段』來進行處理的;

• grep 與 egrep 在正規表示法裡面是很常見的兩支程式,其中, egrep 可以用不同的模式去匹配,以及支援更嚴謹的正規表示法的語法。

Linux下正規表示式

萬用字元與正規表示式的區別 萬用字元 任意多個字元 任意乙個字元 匹配括號中的乙個字元 1 匹配檔名稱 linux系統 2 萬用字元是完全匹配。3 搜尋檔名的命令ls find cp等命令不支援正規表示式,所以只能使用shell的萬用字元來匹配 正規表示式 包含萬用字元 1 匹配檔案中的資料 lin...

Linux正規表示式 編寫正規表示式

為了所有實用化的用途,你可以通過使用程式產生正確的結果。然而,並不意味著程式總是如你所願的那樣正確地工作。多數情況下,如果程式不能產生想要的輸出,可以斷定真正的問題 排除輸入或語法錯誤 在於如何描述想要的東西。換句話說,應該考慮糾正問題的地方是描述想要的結果的表示式。表示式不完整或者公式表示得不正確...

linux下的正規表示式

一 正規表示式的定義 簡單的說,正規表示式 就是 為處理大量的字串 而定義的一套規則和方法。linux正規表示式一般以行為單位處理。例如 代表xinwen 代表lianbo echo 就是 xinwenlianbo 二 正規表示式可以解決什麼問題 為什麼要學習正規表示式呢?在企業工作中,linux運...