RM新时代网站-首页

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線(xiàn)課程
  • 觀(guān)看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

如何使用grep命令的多種搜索模式及搜索多個(gè)字符串

如意 ? 來(lái)源:良許Linux微信公眾號(hào) ? 作者:良許 ? 2020-09-07 11:24 ? 次閱讀

大家好,我是良許!

今天向大家介紹一個(gè)非常有用的技巧,那就是使用 grep 命令查找多個(gè)字符串。

簡(jiǎn)單介紹一下,grep 命令可以理解為是一個(gè)功能強(qiáng)大的命令行工具,可以用它在一個(gè)或多個(gè)輸入文件中搜索與正則表達(dá)式相匹配的文本,然后再將每個(gè)匹配的文本用標(biāo)準(zhǔn)輸出的格式寫(xiě)出來(lái)。

因此,良許向大家分享一下如何使用 grep 命令的多種搜索模式以及使用 grep 搜索多個(gè)字符串:

多模式 Grep 命令

grep 命令支持三種正則表達(dá)式語(yǔ)法:Basic、Extended 和 Perl-compatible 。當(dāng)沒(méi)有指定正則表達(dá)式類(lèi)型時(shí),grep 命令將搜索模式默認(rèn)為基本正則表達(dá)式。

要搜索多個(gè)匹配模式,可以使用 OR ( alternation ) 運(yùn)算符。我們可以用 OR 運(yùn)算符 |( pipe )指定不同的匹配項(xiàng),這些匹配項(xiàng)可以是文本字符串,也可以是表達(dá)式集。值得注意的是,在所有正則表達(dá)式運(yùn)算符中,這個(gè)運(yùn)算符的優(yōu)先級(jí)是最低的。

使用 grep 命令基本正則表達(dá)式搜索多個(gè)匹配模式的語(yǔ)法如下:

$ grep ‘pattern1\|pattern2’ filename

這里需要注意的是,始終要用單引號(hào)將正則表達(dá)式括起來(lái),因?yàn)閱我?hào)內(nèi)的內(nèi)容原樣輸出,被單引號(hào)括起的內(nèi)容不管是常量還是變量不會(huì)發(fā)生替換。

使用基本正則表達(dá)式時(shí),元字符被解釋為字面字符。要保留元字符的特殊含義,必須用反斜杠( \ )對(duì)它們進(jìn)行轉(zhuǎn)義。這就是為什么我們要轉(zhuǎn)義 OR 運(yùn)算符(|)。

要將模式解釋為擴(kuò)展正則表達(dá)式,請(qǐng)調(diào)用 grep -E(或 --extended-regexp )選項(xiàng)。使用擴(kuò)展正則表達(dá)式時(shí),不需要對(duì) OR 運(yùn)算符 (|) 進(jìn)行轉(zhuǎn)義:

$ grep -E ‘pattern1|pattern2’ file

Grep命令搜索多個(gè)字符串

通常我們認(rèn)為,文字字符串是最基本的模式。

接下來(lái)我們將示例,搜索某用戶(hù)日志錯(cuò)誤文件中出現(xiàn)的所有 fatal、error 和 critical 字符串。語(yǔ)法如下:

$ grep ‘fatal\|error\|critical’ /var/log/nginx/error.log

還需要注意的是,如果要搜索的字符串包含空格,需要用雙引號(hào)將其括起來(lái)。

下面是使用擴(kuò)展正則表達(dá)式的同一個(gè)示例,它不需要轉(zhuǎn)義字符:

$ grep -E ‘fatal|error|critical’ /var/log/nginx/error.log

默認(rèn)情況下,grep 命令是區(qū)分大小寫(xiě)的。要在搜索時(shí)忽略大小寫(xiě),請(qǐng)調(diào)用 grep 加 -i (或 --ignore-case )選項(xiàng),示例如下:

$ grep -i ‘fatal|error|critical’ /var/log/nginx/error.log

當(dāng)你只想搜索某個(gè)單詞時(shí),比如你想搜索的是單詞 error ,grep 命令會(huì)輸出所有包含 error 字符串的行,即它除了會(huì)輸出包含 error 單詞的行,還會(huì)輸出包含 errorless 或 antiterrorists 等非 error 單詞的行,這樣是極不方便的。

因此要僅返回指定字符串是整詞的行,或者是由非單詞字符括起來(lái)的行,可以使用 grep 加 -w (或 --word-regexp )選項(xiàng):

$ grep -w ‘fatal|error|critical’ /var/log/nginx/error.log

值得注意的是,單詞字符包括有字母、數(shù)字字符(比如 a-z、a-Z 和 0-9 )以及下劃線(xiàn)( _ ),所有其他字符都被視為非單詞字符。

總結(jié)

在工作中,我們經(jīng)常需要用到 grep 命令來(lái)搜索字符串,學(xué)會(huì)了使用 grep 搜索多個(gè)字符串這個(gè)技巧,一定有機(jī)會(huì)用上的。實(shí)際上,grep 命令遠(yuǎn)不止本文所講的功能,如果你對(duì) grep 命令的功能有任何疑問(wèn)或者還想學(xué)習(xí)它的其他功能,請(qǐng)留言告訴我唄!
責(zé)編AJX

聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀(guān)點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • Linux
    +關(guān)注

    關(guān)注

    87

    文章

    11292

    瀏覽量

    209328
  • 操作系統(tǒng)
    +關(guān)注

    關(guān)注

    37

    文章

    6801

    瀏覽量

    123283
  • 字符串
    +關(guān)注

    關(guān)注

    1

    文章

    578

    瀏覽量

    20506
  • grep
    +關(guān)注

    關(guān)注

    0

    文章

    22

    瀏覽量

    4723
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    如何在bash中分割字符串

    假設(shè)我們有一個(gè)由逗號(hào)或者下劃線(xiàn)隔開(kāi)的多個(gè)單詞組成的字符串,需要拆分這個(gè)字符串提取各個(gè)單詞。
    發(fā)表于 12-07 17:10 ?3712次閱讀

    grep命令搜索字符串之技巧

    做嵌入式linux開(kāi)發(fā)的,相信大家對(duì)source insight 再熟悉不過(guò)了,source insight非常強(qiáng)大,尤其當(dāng)我們的工程浩大,想要搜索個(gè)字符串如函數(shù)、宏時(shí),source
    發(fā)表于 12-17 23:34

    labview中已知4個(gè)字符串(每個(gè)字符串包含一個(gè)字符)如何隨機(jī)排列?

    labview中已知4個(gè)字符串(每個(gè)字符串包含一個(gè)字符)如何隨機(jī)排列?求大神給個(gè)程框圖。
    發(fā)表于 01-22 15:43

    如何判斷一個(gè)字符串開(kāi)頭?

    命令以“$Cmd,”開(kāi)頭,以“,”分隔,以“*”結(jié)尾。單片機(jī)回復(fù)以“$Message,”開(kāi)頭,以“,”分隔,以“*”結(jié)尾。如果錯(cuò)誤這以“$Message,ERROR,”開(kāi)頭,以“,”分隔,以“*”結(jié)尾。我想問(wèn)我如何判斷一個(gè)字符串開(kāi)頭,判斷一
    發(fā)表于 09-11 22:13

    UART_LOOP_查詢(xún)接收多個(gè)字符串

    UART_LOOP_查詢(xún)接收多個(gè)字符串源碼
    發(fā)表于 01-21 11:11 ?6次下載

    Labview之搜索替換字符串

    Labview之搜索替換字符串,很好的Labview資料,快來(lái)下載學(xué)習(xí)吧。
    發(fā)表于 04-19 10:23 ?0次下載

    Linux中用grep命令來(lái)搜索單詞及統(tǒng)計(jì)匹配的行數(shù)

    使用 grep 命令來(lái)搜索多個(gè)單詞要使用 grep 命令來(lái)
    發(fā)表于 04-02 14:46 ?632次閱讀

    如何利用Java判斷一個(gè)字符串是否包含某個(gè)字符

    如何利用Java通過(guò)不同的方法來(lái)判斷一個(gè)字符串是否包含某個(gè)字符。 **2 ****方法** 1. .contains方法
    的頭像 發(fā)表于 02-17 15:13 ?1487次閱讀
    如何利用Java判斷一<b class='flag-5'>個(gè)字符串</b>是否包含某<b class='flag-5'>個(gè)字符</b>

    C語(yǔ)言字符串的引用方式

    在C語(yǔ)言程序中,字符串是存放在字符數(shù)組中的。 2. 用字符數(shù)組存放一個(gè)字符串,可以通過(guò)數(shù)組名和下標(biāo)引用字符串中的一
    的頭像 發(fā)表于 03-10 14:57 ?1912次閱讀

    Python中檢查字符串包含的方法

    Python 有多種處理字符串的方法。今天我們介紹如何檢查一個(gè)字符串中是否包含另一個(gè)字符串
    的頭像 發(fā)表于 05-14 16:02 ?1.6w次閱讀

    KUKA機(jī)器人: 如何比較兩個(gè)字符串變量

    用功能 StrComp() 可以比較兩個(gè)字符串變量。 Comp = StrComp( StrComp1[], StrComp2[], CaseSens )
    的頭像 發(fā)表于 07-10 09:27 ?987次閱讀

    mysql字符串包含某個(gè)字符串

    將詳盡、詳實(shí)、細(xì)致地探討MySQL中字符串包含的實(shí)現(xiàn)方法。 在MySQL中,可以通過(guò)使用內(nèi)建函數(shù)和通配符來(lái)實(shí)現(xiàn)字符串包含的操作。下面將詳細(xì)介紹幾種常用的方法: 使用LIKE通配符: LIKE是MySQL中用于模式匹配的通配符,可
    的頭像 發(fā)表于 11-16 14:52 ?3783次閱讀

    linux搜索文件里的字符串

    在Linux系統(tǒng)中,我們可以使用各種方法來(lái)搜索文件中的字符串。在本文中,我將為您詳細(xì)介紹幾種常用的方法和工具。讓我們開(kāi)始吧! grep命令 grep
    的頭像 發(fā)表于 11-23 10:20 ?1529次閱讀

    oracle判斷字符串包含某個(gè)字符

    包含某個(gè)字符,以及介紹使用的相關(guān)函數(shù)。 正文: 一、使用INSTR函數(shù)進(jìn)行判斷: INSTR函數(shù)是Oracle中最常用的字符串函數(shù)之一,它用于查找字符串中是否包含某個(gè)字符。INSTR函
    的頭像 發(fā)表于 12-06 09:53 ?1.5w次閱讀

    oracle字符串split成多個(gè)

    Oracle是一種廣泛使用的關(guān)系型數(shù)據(jù)庫(kù)管理系統(tǒng),它提供了許多強(qiáng)大的功能和函數(shù),用于處理和操作數(shù)據(jù)。其中之一就是字符串分割(split)方法,該方法用于將一個(gè)字符串按照指定的分隔符分割成多個(gè)
    的頭像 發(fā)表于 12-06 09:54 ?5274次閱讀
    RM新时代网站-首页