導航:首頁 > 操作系統 > linux正則表達式匹配

linux正則表達式匹配

發布時間:2023-09-23 14:38:00

⑴ 如何在linux下查找文件內容包含某個特定字元串的文件

概述

使用grep可以查找包含指定字元串的文件

步驟詳解

格式:

grep 「要查找的字元串」 文件名

例子:

grep "192.168.0.1" /etc

文件名可以使用基本正則表達式(BRE),例如, 查找test目錄下的所有文件,是否包含www.tycode.com字元串。

grep 「www.tycode.com」 /root/zzh/test/*

幾個常用的查詢指令:

1、查找時不區分字元串的大小寫

grep -i 「查找的字元串」 文件名

2、查找時使用正則表達式,匹配符合的字元串

grep -e 「正則表達式」 文件名

3、查找不匹配指定字元串的行:

grep -v 「被查找的字元串」 文件名

4、查找時顯示被查找字元串所在的行數

grep -n 「查找的字元串」 文件名

⑵ linux 中 ^[^abc] 正則表達式什麼意思

^代錶行首,$代錶行尾
1、^[a-z]匹配以小寫字母開頭的字元串
2、[^a-z] 不包含小寫字母的字元匹配
3、^[^a-z] 開頭不包含小寫字母的字元匹配

⑶ Linux正則表達式

一.linux文本查找命令

在說linux正規表達式之前,還介紹下linux中查找文本文件常用的三個命令:

1.grep : 最早的文本匹配程序,使用POSIX定義的基本正則表達式(BRE)來匹配文本。

2.egrep : 擴展式grep,其使用擴展式正規表達式(ERE)來匹配文本。

3.fgrep : 快速grep,這個版本匹配固定字元串而非正則表達式。並且是唯一可以並行匹配多個字元串的版本。

如下簡單的介紹grep命令:

語法格式:

grep [options ...] pattern-spec [files ...]

用途:

匹配一個或多個模式的文本行。

options:

-E : 使用擴展正則表達式進行匹配, grep -E 或取代 egrep 命令。

-F : 使用固定字元串進行匹配, grep -F 或取代傳統的fgrep命令。

-e : 通常第一個非選項的參數認為是要匹配的模式,也可以同時提供多個模式,只要將其放入單引號,並用換行字元分隔他們。

模式以減號開頭時,為防止混淆其為選項,-e選項說明其後的參數為模式,即使他以減號開頭。

-f : 從pat-file文件讀取模式作為匹配。

-i : 模式匹配時忽略大小寫差異。

-l : 列出匹配模式的文件名稱,而不是列印匹配的行。

-q : 靜默的,如果匹配成功,不將匹配的行輸出到標准輸出;否則即是不成功。

-s : 不顯示錯誤信息,通常與-q並用。

-v : 顯示不匹配模式的行。

說明:可以同時查找多個文件中的內容,當指定多個文件時,每個顯示出的文件行前會有文件名加一個冒號標識其來自哪個文件。

可以使用多個-e 或 -f 選項,建立要查找的模式列表。

二.正則表達式簡要介紹

1.正則表達式的組成

(1).一般字元:沒有特殊意義的字元

(2).特殊字元(meta字元):元字元,有在正則表達式中有特殊意義

2.如下講下正則表達式中的常見meta字元

(1).POSIX BRE與ERE中都有的meta字元:

\   :  通常用於打開或關閉後續字元的特殊含義,如\(...\)與\{...\}

.   :   匹配任何單個字元(除NUL)

*  :   匹配其前的任何數目或沒有的單個字元,例: . 表示任一字元, 則 .* 匹配任一字元的任意長度

^  :   匹配緊接著的正則表達式,BRE中僅在正則表達式的開頭有特殊的含義,ERE中在任何位置都有特殊含義

$  :   匹配前面的正則表達式,在字元串或者行結尾處。BRE中僅在正則表達式的結尾處有特殊的含義,ERE中在任何位置都有特殊含義

[]  :   匹配方括弧內的任一字元,其中可用連字元(-)指的連續字元的范圍;^符號苦出現在方括弧的第一個位置,則表示匹配不在列表中的任一字元,

(2).POSIX BRE中才有的字元:

\{n,m\} : 區間表達式,匹配在它前面的單個字元重現的次數區別。\{n\}指重現n次;\{n,m\}指重現n至m次;

\( \) : 保留空間,可以將最多9個獨立的子模式存儲在單個模式中。如\(ab\).*\1 : 指匹配ab組合的兩次重現,中間可存在任意數目的字元。

\n : 重復在\(與\)方括弧內第n個子模式至此點的模式。

(3).POSIX ERE中才有的字元:

{n,m} : 與BRE的\{n,m\}功能相同

+ : 匹配前面正則表達式的一個或多個擴展

? : 匹配前面正則表達式的零個或一個擴展

| : 匹配|符號前或後的正則表達式

( ) : 匹配方括弧括起來的正則表達式群

(4). 方括弧([])表達式

4.1.字元集  [:  :]

標識字元集,有如下幾種:

[::alnum] : 數字字元[:digit:] : 數字字元[:punct:] : 標點符號字元

[:alpha:] : 字母字元[:graph:] : 非空格字元[:space:] : 空格字元

[:blank:] : 空格與定位字元[:lower:] : 小寫字母字元[:upper:] : 大寫字母字元

[:cntrl:] : 控制字元[:print:] : 可顯示的字元[:xdigit:] : 16進制數字

 4.2.排序符號

指將多個字元視為一個符號,如[.ch.]即將ch視為一個符號

4.3.等價字元

認為多個字元相等,如[=e=]在法文的locale里,可匹配於多種與e相似的字元,此處不再列出。

說明:這三種構造除其自身的方括弧之外,還必須使用額外的方括弧括起來。

例 : [[:alpha:]!] : 匹配任一英文字母或感嘆號。

[[.ch.] : 匹配ch排序元素,而不匹配單獨的字母c或h.

 3.簡單正規表達式匹配案例

china  : 匹配此行中任意位置有china字元的行

^china : 匹配此以china開關的行

china$ : 匹配以china結尾的行

^china$ : 匹配僅有china五個字元的行

[Cc]hina : 匹配含有China或china的行

Ch.na : 匹配包含Ch兩字母並且其後緊跟一個任意字元之後又有na兩個字元的行

Ch.*na : 匹配一行中含Ch字元,並且其後跟0個或者多個字元,再繼續跟na兩字元

二.實例

如下通過常用實例來學習BRE和ERE匹配,源文件url.txt內容如下:

www..com

http://www..com

https://www..com

http://wwwcom

.com



1.url匹配

匹配以http或者https開頭,並且其後為:並且含有.的串

BRE匹配:

grep '^https\{0,1\}.*\..*' url.txt

ERE匹配:

grep -E '^https?.*\..*' url.txt

匹配結果如下:

http://www..com

https://www..com

2.Email匹配

示例文件內容為:

[email protected]

aaaa@

[email protected]

[email protected]

@@.com

匹配以字母數字或者下劃線開頭的多個字元,其後有一個@之後有多個字母數字或者下劃線,其中有一個.號

grep '^[[:alpha:][:digit:]_]*@[[:alpha:][:digit:]]*\..*' email.txt

 匹配結果:

[email protected]

[email protected]

[email protected]

轉自 嘉為教育-rhce認證_rhce培訓_linux培訓_linux認證_linux考證

⑷ Linux正則表達式教程:Grep Regex示例

正則表達式是特殊字元,可幫助搜索數據,匹配復雜模式。正則表達式縮寫為「regexp」或「regex」。

為了便於理解,讓我們逐一學習不同類型的正則表達式。

[TOC]

一些常用的正則表達式命令是tr,sed,vi和grep。下面列出了一些基本的正則表達式。

我們來看一個例子吧。

執行cat示例以查看現有文件的內容

搜索包含字母'a'的內容。

' ^ '匹配字元串的開頭。讓我們搜索一下STARTS的內容

僅過濾以字元開頭的行。將忽略開頭不包含字元「a」的行。

讓我們看看另一個例子 -

僅選擇那些以 $ 結尾的行

這些表達式告訴我們字元串中字元的出現次數。他們是

例:

過濾掉包含字元'p'的所有行

我們想要檢查字元'p'是否在字元串中依次出現2次。為此,語法將是:

注意:您需要使用這些正則表達式添加-E。

這些正則表達式包含多個表達式的組合。他們之中有一些是:

例:

搜索所有字元't'

假設我們要過濾字元'a'在字元't'之前的行

我們可以使用命令

大括弧擴展的語法是花括弧「{}」內的序列或逗號分隔的項目列表。序列中的起始和結束項由兩個句點「..」分隔。

一些例子:

在上面的示例中,echo命令使用大括弧擴展創建字元串。

⑸ Linux Shell正則表達式如何匹配1~3位數字

grep '^[0-9]\{1,3\}$' test.txt | grep '^[1-9]'

如果是變數

echo $var | grep '^[0-9]\{1,3\}$' | grep '^[1-9]'

$表示行尾

這個正則不匹配 12a 這樣的字元串

你的變數內容是什麼樣的看

我用來測試的 test.txt 的內容:
123
321
123212
001
010
100
10000
0011
10101
1101
1
2
3
11
22
33
1a
2a

⑹ Linux grep、egrep使用命令詳解

grep egrep區別
grep 默認不支持擴展 但可以通過-E 選擇來支持擴展正則
egrep 支持擴展正則

關於正則與擴展正則的區別可以看我另一篇shell 正則的介紹
文件處理順序 以行為單位,逐行進行處理
默認只輸出與表達式相匹配的文本行

基本用法
- 格式1:egrep [選擇] '正則表達式' 文件
- 格式2:前置命令 | egrep [選擇] '正則表達式'

• egrep命令工具 (擴展正則命令)

• 常用命令選項

•grep 正則表達式,用來查找過濾文檔的工具符號
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之外的內容
grep "[a-z]" user //查找小寫字母
grep "[A-Z]" user //查找大寫字母
grep "[a-Z]" user //查找所有字母
grep "[0-9]" user //查找數字

grep "r..t" user //查找以r開頭t結尾中間有2個任意字元的單詞
grep "r. " user //查找以r開頭後面任意字元 相當手通配符
grep "ro*" user //查找以r開頭後面有或沒有字母o的單詞,o可以出現任意次
grep "o{1,2}" user //查找o出現1次到2次的行
grep "o{2,3}" user //查找o出現2次到3次的行
grep "o{2}" user //查找o出現2次的行
grep "o{1,} " user //查找o出現1次以及1次以上
grep "(:0){2}" user //查找:0(數字零)連續出現2次的行
擴展正則
egrep "o+" user //查找o出現1次以及1次以上
egrep "o?" user //查找o出現0次或1次
egrep "o{1,2}" user //查找o出現1次到2次的行
egrep "o{2,3}" user //查找o出現2次到3次的行
egrep "o{2}" user //查找o出現2次的行
egrep "o{1,}" user //查找o出現1次以及1次以上
egrep "(:0){2}" user //查找:0(數字零)連續出現2次的行
egrep "bash|nologin" user //查找bash或者nologin
egrep "the" a //查找單詞the,前後是空格或者特殊符號

案例:
正則表達式匹配練習
1)典型的應用場合:grep、egrep檢索文本行
grep命令不帶-E選項時,支持基本正則匹配模式。比如「word」關鍵詞檢索、「^word」匹配以word開頭的行、「word$」匹配以word結尾的行……等等。
輸出以「r」開頭的用戶記錄:

輸出以「localhost」結尾的行:

若希望在grep檢索式同時組合多個條件,比如輸出以「root」或者以「daemon」開頭的行:

而若若使用grep -E或egrep命令,可支持擴展正則匹配模式,能夠自動識別 |、{} 等擴展正則表達式中的特殊字元,用起來更加方便,比如:

或者

使用grep -E 與 使用egrep命令完全等效,推薦使用後者,特別是涉及到復雜的正則表達式的時候。
2)grep、egrep命令的-q選項
選項 -q 表示 quiet(靜默)的意思,結合此選項可以只做檢索而並不輸出,通常在腳本內用來識別查找的目標是否存在,通過返回狀態 $? 來判斷,這樣可以忽略無關的文本信息,簡化腳本輸出。
比如,檢查/etc/hosts文件內是否存在192.168.4.4的映射記錄,如果存在則顯示「YES」,否則輸出「NO」,一般會執行:

這樣grep的輸出信息和腳本判斷後的提示混雜在一起,用戶不易辨別,所以可以改成以下操作:

是不是清爽多了,從上述結果也可以看到,使用 -q 選項的效果與使用 &> /dev/null的效果類似。
3)基本元字元 ^、$ —— 匹配行首、行尾
輸出注釋的配置行(以#開頭的行):

統計本地用戶中登錄Shell為「/sbin/nologin」的用戶個數:
提示: -m10僅在文件的前10行中過濾,後面的行不再過濾。

結合 -c 選項輸出匹配的行數

使用 -c 選項可輸出匹配行數,這與通過管道再 wc -l的效果是相同的,但是寫法更簡便。比如,統計使用「/bin/bash」作為登錄Shell的正常用戶個數,可執行:

或者

4)基本元字元 . —— 匹配任意單個字元
以/etc/rc.local文件為例,確認文本內容:

輸出/etc/rc.local文件內的空行(用 –v 選項將條件取反):

5)基本元字元 +、?、 —— 目標出現的次數*
還以/etc/rc.local文件為例:

輸出包括 f、ff、ff、……的行,即「f」至少出現一次:

輸出包括init、initial的行,即末尾的「ial」最多出現一次(可能沒有):

輸出包括stu、stuf、stuff、stufff、……的行,即末尾的「f」可出現任意多次,也可以沒有。重復目標只有一個字元時,可以不使用括弧:

輸出所有行,單獨的「.*」可匹配任意行(包括空行):

輸出/etc/passwd文件內「r」開頭且以「nologin」結尾的用戶記錄,即中間可以是任意字元:

6)元字元 {} —— 限定出現的次數范圍
創建一個練慣用的測試文件:

輸出包括ababab的行,即「ab」連續出現3次:

輸出包括abab、ababab、abababab的行,即「ab」連續出現2~4次:

輸出包括ababab、abababab、……的行,即「ab」最少連續出現3次:

7)元字元 [] —— 匹配范圍內的單個字元
還以前面的測試文件bracet.txt為例:

輸出包括abc、abd的行,即前兩個字元為「ab」,第三個字元只要是c、d中的一個就符合條件:

輸出包括大寫字母的行,使用[A-Z]匹配連續范圍:

8)單詞邊界匹配
以文件/etc/rc.local為例:

輸出包括單詞「init」的行,文件中「initialization」不合要求:

或者:

輸出包括以「ll」結尾的單詞的行,使用 > 匹配單詞右邊界:

或者:

9)多個條件的組合
通過dmesg啟動日誌查看藍牙設備、網卡設備相關的信息:

⑺ linux的正則表達式,如何完全列印完全匹配5位數以下純數字的內容

grep"^[0-9]{1,5}$"

閱讀全文

與linux正則表達式匹配相關的資料

熱點內容
androidgridview表格 瀏覽:602
壓縮怎麼eq閃 瀏覽:740
流密碼演算法openssl 瀏覽:262
怎麼數黃豆個數python 瀏覽:799
混沌序列加密的結論 瀏覽:224
最新脫單app哪個好 瀏覽:638
如何用自己電腦做伺服器做網頁 瀏覽:140
伺服器安全配置要考什麼證書 瀏覽:633
ipadpro可以編程 瀏覽:541
外國的程序員和中國的程序員 瀏覽:151
抖音小店app如何聯系客服 瀏覽:975
linux打開多個終端 瀏覽:500
linux中的命令 瀏覽:580
優化小米6相機演算法 瀏覽:259
ak47pdf 瀏覽:150
人與文化pdf 瀏覽:640
原子幣app在哪裡注冊的 瀏覽:530
php數組保存文件 瀏覽:226
無理的命令 瀏覽:510
問道手游解壓失敗是什麼原因 瀏覽:776