Linux:shell腳本:基礎使用(4)《正則表達式-grep工具》

正則表達式定義:

? ? ? ? 使用單個字符串來描述,匹配一系列符合某個句法規則的字符串

正則表達式的組成:

? ? ? ? 普通字符串: 大小寫字母,數字,標點符號及一些其他符號

? ? ? ? 元字符:在正則表達式中具有特殊意義的專用字符

正則表達式不能單獨使用,需要配合一些命令 如 grep sed 等命令?


正則表達式

我們先創建一個文件用于測試

he was short and fat.
He was wearing a blue polo shirt with black pants.
The home of Football on BBC Sport online.
the tongue is boneless but it breaks bones.12!
google is the best tools for search keyword.
The year ahead will test our political establishment to the li
PI=3.141592653589793238462643383249901429
a wood cross!
Actions speak louder than words#woood #
#woooooood #
AxyzxyzxyzxyzC
I bet this place is really spooky late at night!
Misfortunes never come alone/single.
I shouldn't have lett so tast.

以上字符是我準備的一個文件的內容,等會我們用grep命令使用正則表達式去檢索內容

?文件名稱無所謂,我的叫tarro.txt


?grep

?我們使用grep查詢里面某一個指定的字符串? the

grep 'the' tarro.txt??

里面每行帶有the字符串的就出來了

如果想知道我們查找的字符串在第幾行?

grep -n 'the' tarro.txt??

前面的數字就是在文件里的行,也就是這段在文件中的幾行幾行

如果想知道在文件中第幾行,并且不區分大小寫,也就是我們指定的字符串無論大小寫都展示出來

grep -in 'the' tarro.txt?

這樣我們查找出來的就不區分大小寫了,即使我們查的是小寫the,加了-i 那么大寫小寫都會有

?如果正好相反我們不想查包含指定字符串的行

grep -nv 'the' tarro.txt?

-v就是反向查找,我們后面指定的字符串就反過來,就查找不帶他們的行,反向查找不包含the的行


?利用中括號[]來查找集合字符

[] ---里面無論有幾個字符,都僅代表一個字符,為‘或’關系
[^] ? --- 括號里面的‘^’是取反的意思

查找包含shirt 或short的行?

grep -n 'sh[io]rt' tarro.txt

可以看到他們中級的字符不一樣,我們使用了查找? 以sh? 開通? rt結尾,中間o或者i? 兩個就全出來了

查找重復單個字符‘oo’的行

grep -n 'oo' test.txt?

里面只要是兩個oo相連的字符串就被查詢出來了?

查找‘oo’前不是‘w’的行?

grep -n '[^w]oo' tarro.txt?

去掉了w開頭的,那為什么#woood # 和 #woooooood # 沒被去掉,因為他們相連的字符串是以#開頭的,你可以和上一個比對一下

查找‘oo’前不是小寫字母的行?

grep -n '[^a-z]oo' tarro.txt

現在前面小寫的a-z開通的都被去掉了,F是大寫的所以還在?

查找‘oo’前不是大寫字母的行

grep -n '[^A-Z]oo' tarro.txt?

剛剛那個F開頭的就沒了,就剩下一些小寫開頭的行了

查找包含數字的行

?grep -n '[0-9]' tarro.txt?

上圖只要是行內帶有數字的行就被查出來了?

?查找行首^與行尾字符$

小數點‘.’在正則表達式中為元字符,需要使用轉義字符‘\’將其轉化為普通字符

查找以小數點‘.’結尾的行。

grep -n '\.$' tarro.txt

查找空行?

grep -n '^$' test.txt?

查找以‘w’開頭,‘d’結尾共4個字符的行?

grep -n 'w..d' tarro.txt

查詢至少包含兩個o以上的字符串

grep -n 'ooo*' tarro.txt??

查找以‘w’開頭,中間至少包含一個‘o'的,‘d’結尾的行

grep -n 'woo*d' tarro.txt??

查找以‘w’開頭,‘d’結尾 中間字符可有可無 的行?

grep -n 'w.*d' test.txt?

查詢任意數字的行?

grep -n '[0-9][0-9]*' test.txt?


??查找連續字符范圍{}

使用'.' 和'*'可以設置零個或無限多個重復的字符
如果要限制一個范圍則使用‘{}’

查看2個o的字符?

grep -n 'o\{2\}' test.txt?

查看w開頭,d結尾,中間為2-5個o的字符串
grep -n 'wo\{2,5\}d' test.txt?

查看w開頭,d結尾,中間為2以上o的字符串
grep -n 'wo\{2,\}d' test.txt??


基礎正則表達式的常見元字符

\b ? 單詞的開頭或結尾,只匹配一個位置,不匹配分隔標點符號和空格 ? ?\bHello\b
\d ? 一個數字,等價于 [0-9] ? ?0\d\d-\d{8} 固定電話
* ? ? ?數量,它前面的內容以連續使用的任意次數以達到整個表達式匹配,可以是0次匹配 ?.*?
+ ? ? 和* 類似,但至少匹配1次, 匹配一個或多個 ? ? \d+
? ? ?和上面兩個類似,重復0次或一次
. ? ? ?匹配除了換行符以外任意字符 ?
\s ? ?匹配任意的空白符、制表符、換行符、中文全角空格等
\w 匹配字母、數字、漢字或者下劃線
^ ? 用來查找的字符串的開頭 ? ^\d{5,12}$ ? ?5~12位的QQ
$ ? 用來查找的字符串的結尾
{n} ? ? ? 前面必須連續重復匹配n次,\d{8} ? \bw{6}\b 剛好6個字符的單詞
{n,m} ? 前面必須連續重復匹配n~m次,
{n,} ? ? ? 前面必須連續重復匹配n~更多次,
\ ? 如果需要查找元字符,需要轉義?
[] ? 里面的字符可以不用轉義,用來定義匹配集合 ? [?.*()]

3.擴展正則表達式----egrep、awk命令支持
3.1 擴展正則表達式的常見元字符
+?? ??? ?重復一個或者一個以上的前一個字符

??? ??? ?零個或者一個的前一個字符

|?? ??? ?使用或者(or)的方式找出多個字符

()?? ??? ?查找“組”字符串

()+?? ??? ?辨別多個重復的組

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/40722.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/40722.shtml
英文地址,請注明出處:http://en.pswp.cn/news/40722.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

python中__main__的解釋

源自于:https://zhuanlan.zhihu.com/p/340997807 Python程序運行時是從模塊頂行開始,最頂層(沒有被縮進)的代碼都會被執行,所以Python中并不需要一個統一的main()作為程序的入口。 __name__是Python的內置變量&#…

藍橋杯嵌入式省一教程:(三)按鍵掃描與定時器中斷

在第一講中曾經提到,GPIO有輸入輸出兩種模式。在點亮LED時,我們已經使用了GPIO輸出模式,在按鍵識別中,我們將要使用GPIO輸入模式。首先來看看按鍵的電路原理圖(下圖在選手資源數據包——CT117E-M4產品手冊中&#xff0…

Android CCodec (二十) CCodec Native服務實現分析

1、C2解碼服務registerAsService注冊流程 google實現CCodec的vendor默認解碼服務代碼路徑是在frameworks/av/media/codec2/hidl/services/vendor.cpp中,而其注冊的是HIDL服務,本文就對HIDL服務注冊做簡要分析。首先看下vendor.cpp中的代碼注冊流程。 int main(int /* argc *…

高等數學教材重難點題型總結(三)微分中值定理和導數的應用

第三章,微分中值定理的證明題等,非常重要,需要牢牢掌握 1.證明中值定理對某函數在給定區間上的正確性 2.與中值定理有關的證明題 3.微分中值定理應用于求證不等式 4.洛必達法則求極限 5.洛必達的經典錯誤反例 6.按某項實現多項式冪展開 7.求帶…

以 Java NIO 的角度理解 Netty

文章目錄 前言Java NIO 工作原理Selector 的創建ServerSocketChannel 的創建ServerSocketChannel 注冊 Selector對事件的處理總結 前言 上篇文章《Netty 入門指南》主要涵蓋了 Netty 的入門知識,包括 Netty 的發展歷程、核心功能與組件,并且通過實例演示…

rabbitmq的發布確認

生產者將信道設置成 confirm 模式,一旦信道進入 confirm 模式, 所有在該信道上面發布的 消息都將會被指派一個唯一的 ID (從 1 開始),一旦消息被投遞到所有匹配的隊列之后,broker 就會發送一個確認給生產者(包含消息的唯一 ID)&…

AI巨浪下,數據技術如何驅動智能未來?

引言 數據技術是大數據時代的核心驅動力,也是推動各行各業數字化轉型和智能化升級的關鍵因素。隨著云計算、人工智能、區塊鏈等新興技術的不斷發展和融合,數據技術也呈現出多模態、混合處理、自動化管理等新的趨勢和特點。 8 月 19 日(周六&…

域名和ip的關系

域名和ip的關系 一:什么是域名 域名,簡稱域名、網域,是由一串用點分隔的名字組成的上某一臺計算機或計算機組的名稱,用于在數據傳輸時標識 計算機的電子方位(有時也指地理位置)。網域名稱系統,有時也簡稱為域名…

【寶藏系列】嵌入式 C 語言代碼優化技巧【超詳細版】

【寶藏系列】嵌入式 C 語言代碼優化技巧【超詳細版】 文章目錄 【寶藏系列】嵌入式 C 語言代碼優化技巧【超詳細版】前言整形數除法和取余數合并除法和取余數通過2的冪次進行除法和取余數取模的一種替代方法使用數組下標全局變量使用別名變量的生命周期分割變量類型局部變量指針…

Centos下的tcpdump抓包用法

先查一下是否安裝, 無的話裝一下 (版本低的用yum install) : rpm -qa tcpdump dnf install tcpdump 1. 列出能抓包的網卡: tcpdump -D | --list-interfaces 2. 在eth0網卡上抓來源為10.1.1.1 的包, 只抓一個包 (-n這里是不解析DNS) : tcpdump -i eth0 -n src 10.1.1.1 -…

STM32 F103C8T6學習筆記3:串口配置—串口收發—自定義Printf函數

今日學習使用STM32 C8T6的串口,我們在經過學習筆記2的總結歸納可知,STM32 C8T6最小系統板上有三路串口,如下圖: 今日我們就著手學習如何配置開通這些串口進行收發,這里不講串口通信概念與基礎,可以自行網上…

一文讀懂HTML

文章目錄 HTML的歷史HTML的作用HTML的基本語言 HTML的歷史 HTML(HyperText Markup Language)的歷史可以追溯到20世紀90年代早期,它是互聯網發展的重要里程碑之一。以下是HTML的歷史概述: 早期階段(1980年代末 - 1990年…

FLatten Transformer 簡化版Transformer

今天在找論文時,看到一篇比較新奇的論文,在這里跟大家分享一下,希望可以給一些人提供一些思路。雖然現在Transformer 比較火,在分割上面也應用的比較多,但是我一直不喜歡用,其中一個原因是結構太復雜了&…

golang官方限流器rate包實踐

日常開發中,對于某些接口有請求頻率的限制。比如登錄的接口、發送短信的接口、秒殺商品的接口等等。 官方的golang.org/x/time/rate包中實現了令牌桶的算法。 封裝限流器可以將ip、手機號這種的作為限流器組的標識。 接下來就是實例化限流器和獲取令牌函數的實現…

C++:模擬實現list及迭代器類模板優化方法

文章目錄 迭代器模擬實現 本篇模擬實現簡單的list和一些其他注意的點 迭代器 如下所示是利用拷貝構造將一個鏈表中的數據挪動到另外一個鏈表中&#xff0c;構造兩個相同的鏈表 list(const list<T>& lt) {emptyinit();for (auto e : lt){push_back(e);} }void test_…

運動路徑規劃,ROS發布期望運動軌跡

目錄 一、Python實現&#xff08;推薦方法&#xff09; 1.1代碼cubic_spline_path.py 1.2使用方法 二、C實現 參考博客 想讓機器人/智能車無人駕駛&#xff0c;要有期望路徑&#xff0c;最簡單的是一條直線&#xff0c;或者是一條光滑曲線。 生成路徑的方法有兩種&#xf…

【網絡編程(二)】NIO快速入門

NIO Java NIO 三大核心組件 Buffer&#xff08;緩沖區&#xff09;&#xff1a;每個客戶端連接都會對應一個Buffer&#xff0c;讀寫數據通過緩沖區讀寫。Channel&#xff08;通道&#xff09;&#xff1a;每個channel用于連接Buffer和Selector&#xff0c;通道可以進行雙向讀…

Linux下C++開發

Linux下C開發 Linux 系統介紹 簡介 Linux屬于多用戶多任務操作系統&#xff0c;而Windows屬于單用戶多任務操作系統Linux一切皆文件目錄結構 bin 存儲二進制可執行文件dev 存放的是外接設備&#xff0c;例如磁盤&#xff0c;光盤等。在其中的外接設備是不能直接被使用的&…

Redis數據庫的可視化工具AnotherRedisDesktopManager使用+抖音直播小玩法實踐

一、它是什么 Another Redis DeskTop Manager 是一個開源項目&#xff0c;提供了以可視化的方式管理 Redis 的功能&#xff0c;可供免費下載安裝&#xff0c;也可以在此基礎上進行二次開發&#xff0c;主要特點有&#xff1a; 支持 Windows 平臺和 MacOS 平臺 支持查詢 Key、…

2023-08-17力扣每日一題

鏈接&#xff1a; 1444. 切披薩的方案數 題意&#xff1a; 給定一個矩陣&#xff0c;其中含有多個蘋果&#xff0c;需要切割k-1次,每次可以切割多行/多列&#xff0c;需要保證切割兩個部分都有蘋果&#xff0c;移除靠上/靠右的部分&#xff0c;對留下部分進行后續的切割&…