日本免费高清视频-国产福利视频导航-黄色在线播放国产-天天操天天操天天操天天操|www.shdianci.com

學(xué)無先后,達(dá)者為師

網(wǎng)站首頁 編程語言 正文

一文教會(huì)你如何使用grep跨多行查找模式匹配_linux shell

作者:mikes?zhang ? 更新時(shí)間: 2022-11-18 編程語言

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

仍然可以在 中處理此問題grep,但是該命令非常笨拙。

grep -Pz '(?s)from.*n.*to' test

這做了幾件事:

  • -P打開Perl 兼容的正則表達(dá)式。
  • -z 將整個(gè)文件作為一行提供,使用“零字節(jié)”而不是換行符。這允許 grep 將整個(gè)事情作為一行處理。 (?s) 打開 PCRE_DOTALL,使. 字符匹配任何字符,包括換行符。
  • from 是首發(fā)比賽。
  • .n. 將匹配所有內(nèi)容,直到to,這是結(jié)束匹配。
    總體而言,這將為腳本目的完成,但如果您自己輸入,請記住很多。此外,使用該-o 標(biāo)志僅打印匹配項(xiàng)也會(huì)打印出尾隨零字節(jié)字符,這可能會(huì)導(dǎo)致其他問題。

使用 pcre2grep 代替(Perl 兼容的 grep)

正grep 則不是完成這項(xiàng)工作的最佳工具,還有一種替代方法pcre2grep ,即開箱即用地支持 Perl 兼容正則表達(dá)式,并且能夠非常輕松地匹配多行正則表達(dá)式。

它可能已安裝在您的系統(tǒng)上,但如果沒有,您可以從包管理器中獲取它:

sudo apt install pcre2-utils

然后,您只需要使用-M 參數(shù)運(yùn)行它。

pcre2grep -M 'from(n|.)*to' file

請注意,這仍然需要您手動(dòng)將“換行符或任何字符”與(n|.)* . 或者,您可以使用該(?s) 技巧打開 PCRE_DOTALL 并使點(diǎn)字符也匹配換行符。

pcre2grep -M '(?s)from.*to' file

總結(jié)

原文鏈接:https://blog.csdn.net/wlcs_6305/article/details/126002601

欄目分類
最近更新