一文教會(huì)你如何使用grep跨多行查找模式匹配
grep 是一個(gè)命令行文本搜索實(shí)用程序,能夠在文件和其他類型的輸入中查找模式和字符串。大多數(shù)匹配只匹配一行,但跨多行匹配通常很有用。
使用 grep 匹配多個(gè)新行
處理多行匹配是一件很困難的事情grep 。一個(gè)更好的工具是awk or sed,它們都可以自然地處理多行輸入。使用兩個(gè)帶有逗號(hào)的表達(dá)式將匹配這兩個(gè)模式之間的所有內(nèi)容。
awk '/from/,/to/' file sed -n '/from/,/to/p' file

仍然可以在 中處理此問(wèn)題grep,但是該命令非常笨拙。
grep -Pz '(?s)from.*n.*to' test

這做了幾件事:
- -P打開(kāi)Perl 兼容的正則表達(dá)式。
- -z 將整個(gè)文件作為一行提供,使用“零字節(jié)”而不是換行符。這允許 grep 將整個(gè)事情作為一行處理。 (?s) 打開(kāi) PCRE_DOTALL,使. 字符匹配任何字符,包括換行符。
- from 是首發(fā)比賽。
- .n. 將匹配所有內(nèi)容,直到to,這是結(jié)束匹配。
總體而言,這將為腳本目的完成,但如果您自己輸入,請(qǐng)記住很多。此外,使用該-o 標(biāo)志僅打印匹配項(xiàng)也會(huì)打印出尾隨零字節(jié)字符,這可能會(huì)導(dǎo)致其他問(wèn)題。
使用 pcre2grep 代替(Perl 兼容的 grep)
正grep 則不是完成這項(xiàng)工作的最佳工具,還有一種替代方法pcre2grep ,即開(kāi)箱即用地支持 Perl 兼容正則表達(dá)式,并且能夠非常輕松地匹配多行正則表達(dá)式。
它可能已安裝在您的系統(tǒng)上,但如果沒(méi)有,您可以從包管理器中獲取它:
sudo apt install pcre2-utils
然后,您只需要使用-M 參數(shù)運(yùn)行它。
pcre2grep -M 'from(n|.)*to' file

請(qǐng)注意,這仍然需要您手動(dòng)將“換行符或任何字符”與(n|.)* . 或者,您可以使用該(?s) 技巧打開(kāi) PCRE_DOTALL 并使點(diǎn)字符也匹配換行符。
pcre2grep -M '(?s)from.*to' file
總結(jié)
到此這篇關(guān)于如何使用grep跨多行查找模式匹配的文章就介紹到這了,更多相關(guān)grep跨多行查找模式匹配內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
linux腳本實(shí)現(xiàn)自動(dòng)發(fā)送和收取郵件的設(shè)置方法
這篇文章主要是介紹linux下通過(guò)腳本自動(dòng)發(fā)送和收取郵件的設(shè)置方法,有需要的朋友可以參考下2013-05-05
linux下編譯boost.python簡(jiǎn)單方法
下面小編就為大家?guī)?lái)一篇linux下編譯boost.python簡(jiǎn)單方法。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-03-03
Shell腳本定時(shí)備份清除運(yùn)行系統(tǒng)日志的代碼
寫(xiě)備份并清除老日志Shell腳本,并附帶一個(gè)清除日志(log)的shell腳本代碼,需要的朋友可以參考下2013-02-02
分享一個(gè)可以通過(guò)命令簡(jiǎn)寫(xiě)執(zhí)行對(duì)應(yīng)命令的Shell腳本
這篇文章主要分享了一個(gè)可以通過(guò)命令簡(jiǎn)寫(xiě)執(zhí)行對(duì)應(yīng)命令的Shell腳本,幫助大家更好的理解和使用shell,感興趣的朋友可以了解下2020-12-12
linux下mysql如何自動(dòng)備份shell腳本
對(duì)任何一個(gè)已經(jīng)上線的網(wǎng)站站點(diǎn)來(lái)說(shuō),數(shù)據(jù)備份都是必須的。無(wú)論版本更新還是服務(wù)器遷移,備份數(shù)據(jù)的重要性不言而喻。人工備份數(shù)據(jù)的方式不單耗費(fèi)大量時(shí)間和精力,還灰常不專業(yè)。下面小編給大家分享linux下mysql自動(dòng)備份shell腳本,需要的朋友可以參考下2015-09-09

