日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 运维知识 > linux >内容正文

linux

Linux 命令之 grep -- 强大的文本搜索工具/正则表达式搜索

發(fā)布時(shí)間:2023/12/3 linux 39 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Linux 命令之 grep -- 强大的文本搜索工具/正则表达式搜索 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

文章目錄

  • 一、命令介紹
  • 二、grep 的三種形式
  • 三、常用選項(xiàng)
  • 四、正則表達(dá)式
  • 五、參考示例
    • 在指定的文件中查找指定的關(guān)鍵詞
    • 查看指定文件中含有特定關(guān)鍵詞的文本行
    • 查看指定文件中所有包含數(shù)字的行
    • 在指定的目錄下遞歸搜索指定的字符串,將符合的文本行及其文件名輸出
    • 在指定文件中搜索指定的字符串,將包含該字符串的行以及后面的指定行數(shù)都顯示出來
    • 將指定文件中含有指定字符串的行及其后面指定數(shù)量的行打印輸出,且打印每行的字節(jié)偏移量
    • 在指定的多個(gè)文件中搜索指定字符串,并且輸出匹配的行及其所屬的文件名
    • 在指定文件中查找指定字符串,且僅輸出匹配到的行數(shù)
    • 在指定目錄及其子目錄的所有文件中查找指定字符串,并返回匹配到的文本行內(nèi)容及對(duì)應(yīng)的文件名
    • 只在一級(jí)子目錄中的特定文件中查找指定的關(guān)鍵詞(不在當(dāng)前目錄中的文件查找)
    • 查看二級(jí)子目錄(子目錄的子目錄)中的特定文件中含有指定關(guān)鍵詞的文本行內(nèi)容
    • 查看當(dāng)前目錄及其所有子目錄下的文件中含有指定關(guān)鍵詞的文本行內(nèi)容及對(duì)應(yīng)文件名
    • 顯示指定文件中符合范本樣式的文本行內(nèi)容及對(duì)應(yīng)的行號(hào)
    • 列出文件內(nèi)容中含有指定關(guān)鍵詞的文件名
    • 查看指定文件中含有完整匹配搜索詞的匹配項(xiàng)的文本行
    • 列出指定目錄下的文件中匹配范本樣式的字符串及對(duì)應(yīng)的文件名
    • 查看指定目錄下的文件內(nèi)容含有符合指定范本樣式的字符串的文件名稱
    • 查看指定目錄下的文件內(nèi)容含有匹配正則表達(dá)式字符串的文本行內(nèi)容和文件名
    • 查看指定的目錄下除了特定文件之外的文件內(nèi)容中含有指定關(guān)鍵詞的文件名
    • 限定在指定文件中進(jìn)行搜索
    • 在指定目錄下查找,并且將特定的目錄排除在搜索范圍之外
    • 將指定目錄中的所有文件所包含的指定字符串替換成另外一個(gè)指定的字符串
  • 六、grep 和 find 的區(qū)別

一、命令介紹

grep 是 Global Search Regular Expression And Print Out The Line 或 Global Regular Expression Print 的簡稱,意思是全面搜索正則表達(dá)式,并將其打印出來。這個(gè)命令可以結(jié)合正則表達(dá)式使用,它也是 Linux 使用最為廣泛的命令。

grep 命令的選項(xiàng)用于對(duì)搜索過程的補(bǔ)充,而其命令的模式十分靈活,可以是變量、字符串、正則表達(dá)式。需要注意的是,一旦模式中包含了空格,務(wù)必要用雙引號(hào)將其引起來。

grep 后面跟著的搜索詞可以加上單引號(hào)或者雙引號(hào),也可以不加任何引號(hào);grep 可以在多種格式的文件中查找指定的內(nèi)容,例如:json、html、txt、docx 等。

二、grep 的三種形式

Linux 支持三種形式的 grep

  • grep:標(biāo)準(zhǔn) grep 命令
  • egrep:簡稱擴(kuò)展 grep 命令,其實(shí)和 grep -E 等價(jià),支持基本和擴(kuò)展的正則表達(dá)式
  • fgrep:簡稱快速 grep 命令,其實(shí)和 grep -F 等價(jià),不支持正則表達(dá)式,按照字符串表面意思進(jìn)行匹配

三、常用選項(xiàng)

選項(xiàng)說明
-a 或 --text不要忽略二進(jìn)制數(shù)據(jù)
-A <n> 或 --after-context=<n>后面需要跟著具體的文件名,選項(xiàng)后跟著數(shù)值,表示除了顯示包含符合范本樣式字符串的文本行以外,并顯示該行之后的 n 行內(nèi)容
-B<n> 或 --before-context=<n>后面需要跟著具體的文件名,選項(xiàng)后跟著數(shù)值,表示除了顯示包含符合范本樣式字符串的文本行以外,并顯示該行之前的 n 行內(nèi)容
-b<n> 或 --byte-offset后面需要跟著具體的文件名,不僅輸出包含指定符合范本樣式字符串的行,而且在每行輸出之前打印每行基于上一行開始處的字節(jié)偏移量
-c 或 --count后面需要跟著具體的文件名,輸出符合范本樣式的行數(shù)
-C<n> 或 --context=<n> 或 -<n>該選項(xiàng)后面必須指定數(shù)值,選項(xiàng) -C 和后面的數(shù)值可以有無空格;選項(xiàng) --context 與后面的數(shù)值必須有空格,也可以使用等號(hào) =,但是等號(hào)與選項(xiàng)和數(shù)值之間不允許有空格;選項(xiàng) - 與后面的數(shù)值之間不允許有空格。除了顯示符合范本樣式的那一行之外,并顯示該行之后 n 行的內(nèi)容
-d <ACTION> 或 --directories=<ACTION>如果輸入文件是一個(gè)目錄,請(qǐng)使用 ACTION 對(duì)其進(jìn)行處理。默認(rèn)情況下,ACTION 是 read,即讀取目錄,就像它們是普通文件一樣。如果操作是 skip,則自動(dòng)跳過目錄。如果操作是 recurse[ri’k?s],則以遞歸方式讀取每個(gè)目錄下的所有文件,僅當(dāng)符號(hào)鏈接位于命令行上時(shí),才跟隨符號(hào)鏈接。這相當(dāng)于 -r 選項(xiàng)
-D <ACTION> 或 --devices=<ACTION>如果輸入文件是設(shè)備、FIFO 或 socket,請(qǐng)使用 ACTION 對(duì)其進(jìn)行處理。默認(rèn)情況下,ACTION 是 read,這意味著讀取設(shè)備就像讀取普通文件一樣。如果操作是 skip,則設(shè)備將被自動(dòng)跳過
-e<PATTERN> 或 --regexp=<PATTERN>指定搜索輸入時(shí)使用的模式:如果輸入行與指定的任何模式匹配,則選中該行。當(dāng)使用多個(gè) -e 選項(xiàng)指定多個(gè)模式時(shí),或者當(dāng)模式以破折號(hào) - 開頭時(shí),此選項(xiàng)最有用
-E 或 --extended-regexp將模式解釋為擴(kuò)展的正則表達(dá)式(即強(qiáng)制grep表現(xiàn)為egrep)
-f<范本文件> 或 --file=<規(guī)則文件>指定范本文件,其內(nèi)容有一個(gè)或多個(gè)范本樣式,讓 grep 查找符合范本條件的文件內(nèi)容,格式為每一行的范本樣式
-F 或 --fixed-regexp將模式解釋為一組固定字符串(即強(qiáng)制grep作為fgrep)
-G 或 --basic-regexp將模式解釋為一個(gè)基本的正則表達(dá)式(即強(qiáng)制grep像傳統(tǒng)的grep那樣工作)
-h或--no-filename顯示含有符合范本樣式的字符串的文本行內(nèi)容,但是不顯示該行所屬的文件名稱,在多文件中查詢默認(rèn)會(huì)顯示對(duì)應(yīng)的文件名
-H 或 --with-filename當(dāng)在指定的多個(gè)文件中查找指定的字符串時(shí),不僅將包含指定字符串的行打印輸出,同時(shí)也輸出該行所屬的文件名
-i 或 --ignore-case忽略大小寫差異,使大小寫不同的字符相互匹配
-l或 --file-with-matches列出文件內(nèi)容含有符合指定范本樣式的字符串的文件名稱
-L 或--files-without-match列出文件內(nèi)容不含有符合指定范本樣式的字符串的文件名稱
-n或 --line-number顯示符合范本樣式的文本行內(nèi)容的同時(shí)也在每行前面標(biāo)示出對(duì)應(yīng)的行號(hào)
-q 或 --quiet 或 --silent不顯示任何信息
-r 或 -R 或 --recursive此參數(shù)的效果和指定 -d recurse 參數(shù)相同
-s 或 --no-messages不顯示錯(cuò)誤信息
-v 或--revert-match從指定文件的內(nèi)容中查找不匹配指定字符串的行
-V 或 --version顯示版本信息
-w 或 --word-regexp只選擇那些包含構(gòu)成整個(gè)單詞的匹配項(xiàng)的行。所謂構(gòu)成整個(gè)單詞是指所匹配的子字符串前面必須跟著非單詞字符,后面也必須跟著非單詞字符。所謂單詞字符是指:字母、數(shù)字和下劃線,其它字符都是非單詞字符。如還指定了選項(xiàng) -x,則此選項(xiàng)無效
-x 或 --line-regexp只顯示整行都匹配指定的范本樣式的行
-y此參數(shù)效果跟 -i 相同
-o只輸出文件中匹配到的部分,把文件內(nèi)容中所有符合范本樣式的字符串打印輸出
-m <num> 或 --max-count=<num>找到 num 行結(jié)果后停止查找,用來限制匹配行數(shù)

四、正則表達(dá)式

表達(dá)式說明
^錨(máo)定行的開始 如:’^grep’匹配所有以grep開頭的行
$錨定行的結(jié)束 如:‘grep$’ 匹配所有以grep結(jié)尾的行
.匹配一個(gè)非換行符的字符 如:'gr.p’匹配gr后接一個(gè)任意字符,然后是p
*匹配零個(gè)或多個(gè)先前字符如:’*grep’匹配所有一個(gè)或多個(gè)空格后緊跟grep的行
.*一起用代表任意字符
[]匹配一個(gè)指定范圍內(nèi)的字符,如’[Gg]rep’匹配Grep和grep
[^]匹配一個(gè)不在指定范圍內(nèi)的字符,如:’[^A-FH-Z]rep’匹配不包含A-R和T-Z的一個(gè)字母開頭,緊跟rep的行
\(..\)標(biāo)記匹配字符,如’(love)’,love被標(biāo)記為1
\<錨定單詞的開始,如:’<grep’匹配包含以grep開頭的單詞的行
\>錨定單詞的結(jié)束,如’grep>'匹配包含以grep結(jié)尾的單詞的行
x\{m\}重復(fù)字符x,m次,如:'0{5}'匹配包含5個(gè)o的行
x\{m,\}重復(fù)字符x,至少m次,如:'o{5,}'匹配至少有5個(gè)o的行
x\{m,n\}重復(fù)字符x,至少m次,不多于n次,如:'o{5,10}'匹配5–10個(gè)o的行
\w匹配文字和數(shù)字字符,也就是[A-Za-z0-9],如:'G\w*p’匹配以G后跟零個(gè)或多個(gè)文字或數(shù)字字符,然后是p
\W\w的反置形式,匹配一個(gè)或多個(gè)非單詞字符,如點(diǎn)號(hào)句號(hào)等
\b單詞鎖定符,如: '\bgrep\b’只匹配grep

五、參考示例

在指定的文件中查找指定的關(guān)鍵詞

在文件 /root/test/text.txt 中查找關(guān)鍵詞“world”,會(huì)輸出匹配到的文本行內(nèi)容:

[root@htlwk0001host ~]# grep world /root/test/text.txt hello shell world! shell world

查看指定文件中含有特定關(guān)鍵詞的文本行

查看文件 text4.txt 中以 Aug 開始的文本行:

[root@htlwk0001host test1]# grep ^Aug text4.txt Augfsdf Augfsdfds

注:^ 這是正則表達(dá)式的元字符,表示匹配行首。^Aug 表示匹配行首的字符串 Aug

查看指定文件中所有包含數(shù)字的行

grep [0-9] /var/log/messages # 選擇 '/var/log/messages' 文件中所有包含數(shù)字的行

在指定的目錄下遞歸搜索指定的字符串,將符合的文本行及其文件名輸出

查看目錄 /var/log 及其所有的子目錄中包含字符串"Aug" 的文本行和對(duì)應(yīng)的文件名:

grep Aug -R /var/log/*

在指定文件中搜索指定的字符串,將包含該字符串的行以及后面的指定行數(shù)都顯示出來

例如,在文件 /root/test/text.txt 中查找字符串“world”,如果存在則將所在行以及后面的3行打印輸出:

[root@htlwk0001host ~]# grep -A 3 'world' /root/test/text.txt hello shell world! # 該行含有字符串 world,輸出此行及其后面的 3 行,但是后面只有 2 行,則輸出 2 行 dfdskklllllf dfsfdsf shell world # 該行含有字符串 world,輸出此行及其后面的 3 行 sdffdsfdsfd dfsfdfdsfds fsdfdsfdsfdsf

我們看下文件 /root/test/text.txt 中的實(shí)際內(nèi)容是什么:

[root@htlwk0001host test]# cat text.txt hello shell world! dfdskklllllf dfsfdsf shell world sdffdsfdsfd dfsfdfdsfds fsdfdsfdsfdsf fdsfdsfdsfd

選項(xiàng) -A 和數(shù)值之間允許有空格,也允許沒有空格:

[root@htlwk0001host ~]# grep -A3 'world' /root/test/text.txt

還可以使用選項(xiàng) --after-context 查詢,不過該選項(xiàng)和數(shù)值之間必須有空格,否則會(huì)報(bào)錯(cuò):

[root@htlwk0001host ~]# grep --after-context 3 'world' /root/test/text.txt

另外選項(xiàng) --after-context 還可以使用等號(hào) = 來指定數(shù)值,但是等號(hào) = 左右兩端不可以有空格:

[root@htlwk0001host ~]# grep --after-context=3 'world' /root/test/text.txt

將指定文件中含有指定字符串的行及其后面指定數(shù)量的行打印輸出,且打印每行的字節(jié)偏移量

將文件 /root/test/text.txt 中含有字符串“world”的行及其后面的 3 行打印輸出,且打印每行的字節(jié)偏移量:

[root@htlwk0001host ~]# grep -b3 'world' /root/test/text.txt # 選項(xiàng) -b 和數(shù)值之間不可以有空格 0:hello shell world! 19-dfdskklllllf # 該行的第 1 個(gè)字符 d 正好是前面一行從 h 開始數(shù)起的第 19 個(gè)字符 32-dfsfdsf # 該行的第 1 個(gè)字符 d 也正好是前面一行從 d 開始數(shù)起的第 13 位,那么加上前面一行 d 的偏移量 19,就是 32 40:shell world # 該行的第 1 個(gè)字符 s 是前面一行從 d 開始數(shù)起的第 8 位,那么加上前面一行 d 的偏移量 32,就是 40 52-sdffdsfdsfd 64-dfsfdfdsfds 76-fsdfdsfdsfdsf

選項(xiàng) -b 后面不跟著數(shù)值,則只打印包含指定字符串的行及其字節(jié)偏移量:

[root@htlwk0001host ~]# grep -b 'world' /root/test/text.txt 0:hello shell world! 40:shell world

還可以使用選項(xiàng) --byte-offset,但是該選項(xiàng)后面不可以跟著數(shù)值:

[root@htlwk0001host ~]# grep --byte-offset 'world' /root/test/text.txt 0:hello shell world! 40:shell world

還可以指定多個(gè)文件進(jìn)行查找:

[root@htlwk0001host test]# grep -b3 'world' text.txt text1.txt text.txt:0:hello shell world! text.txt-19-dfdskklllllf text.txt-32-dfsfdsf text.txt:40:shell world text.txt-52-sdffdsfdsfd text.txt-64-dfsfdfdsfds text.txt-76-fsdfdsfdsfdsf -- text1.txt:0:dsfdsaljflvoworlddslfljds324432 text1.txt-32-sfdsgdflfmbndfkjgrut3409t8ierrig text1.txt:65:gkldfjgleoeworldsdlfjdlsworld text1.txt-95-dsfdsfdsf text1.txt-105-fdsfdsfdsfdsfdsfsdfsdfsdf text1.txt-131-dsfsdfdsfsddfgdfgdfgdfgewreeortreoitureoimbn

在指定的多個(gè)文件中搜索指定字符串,并且輸出匹配的行及其所屬的文件名

[root@htlwk0001host ~]# grep -H 'world' /root/test/text.txt /root/test/text2.txt /root/test/text.txt:hello shell world! /root/test/text.txt:shell world

以上結(jié)果顯示,匹配到兩行文本,且這兩行內(nèi)容都是在文件 /root/test/text.txt 中。

在指定文件中查找指定字符串,且僅輸出匹配到的行數(shù)

[root@htlwk0001host test]# grep -c 'world' text.txt text1.txt text.txt:2 # 文件 text.txt 匹配到 2 行 text1.txt:2 # 文件 text1.txt 也匹配到 2 行

在指定目錄及其子目錄的所有文件中查找指定字符串,并返回匹配到的文本行內(nèi)容及對(duì)應(yīng)的文件名

[root@htlwk0001host test]# grep 'world' -d recurse ./ ./text.txt:hello shell world! ./text.txt:shell world ./tf_company_20210603.sql:Bigworld引擎的游戲開發(fā)技術(shù)。整個(gè)團(tuán)隊(duì)的核心成員均來自國內(nèi)頂尖游戲研發(fā)公司,并全部擁有兩個(gè)以上完整大型MMORPG項(xiàng)目的開發(fā)及運(yùn)營經(jīng)驗(yàn)。作為擁有國內(nèi)創(chuàng)業(yè)公司中最強(qiáng)開發(fā)實(shí)力的第四代互聯(lián)網(wǎng)企業(yè),境界公司旨在為用戶創(chuàng)造精致有趣,豐富平衡的3D游戲世界。 公司網(wǎng)址 www.363.com', 0.00, 0, 0, 0, 0.0000, '2021-02-17 14:34:47', '2021-02-17 14:34:47', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL); ./tf_company_20210603.sql:3, 4, 1, NULL, '無憂互通(www.sail2world.com),是一家專注于提供最領(lǐng)先的移動(dòng)游戲和互聯(lián)網(wǎng)娛樂產(chǎn)品的研發(fā)商和運(yùn)營商。 ./tf_company_20210603.sql:the world, with 45'2021-02-26 14:47:21', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL); ./text1.txt:dsfdsaljflvoworlddslfljds324432 ./text1.txt:gkldfjgleoeworldsdlfjdlsworld[root@htlwk0001host ~]# grep 'make' -d recurse ./test ./test/text.html:<p class="p1">ffdsfsmakefdsfsdfmake</p> ./test/text.html:<p class="p1">sdfsdfdsmake</p> ./test/text.docx:fsdfdsmakesdfsdfsdfds ./test/text.docx:makedsfsdfdsfd ./test/text.txt:Sdfsd make love3434sdfdsfs ./test/text.txt:Fdsfgmake dsfsdf;dgdfdf ./test/text.txt:Make ldsfdsfmake lovefsdf343dv.,.,,.fdsfdsf ./test/text.json:make lovesdlfjf23423432dsffdsf ./test/text.json:sdfldjlfksjff makefsfddsfdsdsf24234ewdfd ./test/text.json:sfdmakesdfdsfds

注:選項(xiàng) -d 后面必須跟著操作項(xiàng)(read/skip/recurse)和目錄,但是其它兩種 ACTION 在實(shí)際業(yè)務(wù)中比較少使用,另外操作項(xiàng) read 非常奇怪,你指定了 read,后面反而不能跟著目錄,必須跟著文件

只在一級(jí)子目錄中的特定文件中查找指定的關(guān)鍵詞(不在當(dāng)前目錄中的文件查找)

[root@htlwk0001host ~]# grep 'make' */*.docx make23434354

注:第一個(gè) * 表示一級(jí)子目錄,第二個(gè) * 表示匹配以 docx 為擴(kuò)展名的任意文件名

查看二級(jí)子目錄(子目錄的子目錄)中的特定文件中含有指定關(guān)鍵詞的文本行內(nèi)容

[root@htlwk0001host ~]# grep 'make' */*/*.docx fsdfdsmakesdfsdfsdfds makedsfsdfdsfd

注:只在二級(jí)子目錄下的文件中查找,不會(huì)在當(dāng)前目錄、一級(jí)子目錄及二級(jí)子目錄下的所有子目錄中查找

查看當(dāng)前目錄及其所有子目錄下的文件中含有指定關(guān)鍵詞的文本行內(nèi)容及對(duì)應(yīng)文件名

在當(dāng)前目錄及其所有子目錄中的文件查找字符串“make”,命令如下:

lwxdeMacBook-Air:test lwx$ grep make -r . ./text.html:<p class="p1">ffdsfsmakefdsfsdfmake</p> ./text.html:<p class="p1">sdfsdfdsmake</p> ./test1/text1.txt:make lovesdfsdfd23423 ./text.docx:fsdfdsmakesdfsdfsdfds ./text.docx:makedsfsdfdsfd ./text.txt:Sdfsd make love3434sdfdsfs ./text.txt:Fdsfgmake dsfsdf;dgdfdf ./text.txt:Make ldsfdsfmake lovefsdf343dv.,.,,.fdsfdsf ./text.json:make lovesdlfjf23423432dsffdsf ./text.json:sdfldjlfksjff makefsfddsfdsdsf24234ewdfd ./text.json:sfdmakesdfdsfds

注:選項(xiàng) -r 表示遞歸,搜索關(guān)鍵詞可以不加引號(hào)。

顯示指定文件中符合范本樣式的文本行內(nèi)容及對(duì)應(yīng)的行號(hào)

[root@htlwk0001host ~]# grep -n 'world' /root/test/text.txt 1:hello shell world! 4:shell world

列出文件內(nèi)容中含有指定關(guān)鍵詞的文件名

將當(dāng)前目錄及其所有子目錄中的文件內(nèi)容中含有字符串“make”的文件名打印輸出:

liaowenxiongdeMacBook-Air:test liaowenxiong$ grep make -r . | cut -d: -f1 | uniq ./text.html ./test1/text1.txt ./text.docx ./text.txt ./text.json

注:cut 是字符串分割命令,-d 用來定義分割符號(hào),-d: 表示將冒號(hào) : 定義為分隔符,-f 顯示指定字段的內(nèi)容,-f1 表示顯示第 1 個(gè)字段的內(nèi)容。所以像這樣的字符串“./text.docx:makedsfsdfdsfd”,會(huì)被分割成“./text.docx”和“makedsfsdfdsfd”,顯示第 1 個(gè)字段的內(nèi)容就是“./text.docx”,因?yàn)橥瑐€(gè)文件中有多行匹配到指定的關(guān)鍵詞,所以分割和取第 1 個(gè)字段的內(nèi)容后會(huì)存在重復(fù)的數(shù)據(jù),那么把命令 cut 處理后的數(shù)據(jù)再輸出給命令 uniq 進(jìn)行去重后就得到上述的結(jié)果了。

查看指定文件中含有完整匹配搜索詞的匹配項(xiàng)的文本行

如下圖所示:

注:所謂完整匹配范本樣式,是指匹配項(xiàng)不僅僅內(nèi)容匹配,而且匹配項(xiàng)的前后必須跟著非單詞字符才行。例如,上圖中的字符串“worldworl”的確含有搜索詞“world”,但是后面跟著單詞字符 w,所以不滿足要求。

列出指定目錄下的文件中匹配范本樣式的字符串及對(duì)應(yīng)的文件名

在把文件內(nèi)容中所有符合范本樣式的字符串打印輸出
在當(dāng)前目錄及其所有的子目錄下的文件中查找關(guān)鍵詞“world”,并將匹配到的字符串打印輸出:

[root@htlwk0001host test]# grep world -o -r . ./text.txt:world ./text.txt:world ./text.txt:world ./text.txt:world ./text.txt:world ./text.txt:world ./tf_company_20210603.sql:world ./tf_company_20210603.sql:world ./tf_company_20210603.sql:world ./tf_company_20210603.sql:world ./tf_company_20210603.sql:world ./tf_company_20210603.sql:world ./tf_company_20210603.sql:world ./tf_company_20210603.sql:world ./tf_company_20210603.sql:world ./tf_company_20210603.sql:world ./test1/text4.txt:world ./text1.txt:world ./text1.txt:world ./text1.txt:world

查看指定目錄下的文件內(nèi)容含有符合指定范本樣式的字符串的文件名稱

查看當(dāng)前目錄及其子目錄中的內(nèi)容含有指定關(guān)鍵詞“world”的文件名:

[root@htlwk0001host test]# grep world -l -r . ./text.txt ./tf_company_20210603.sql ./test1/text4.txt ./text1.txt

注:-l 表示查看內(nèi)容匹配 pattern 的文件名;-r 表示對(duì)指定的目錄遞歸處理。

查看指定目錄下的文件內(nèi)容含有匹配正則表達(dá)式字符串的文本行內(nèi)容和文件名

[root@htlwk0001host test]# grep '[^a-z]oo' -n -r . ./text.txt:5:worldeeworld.'oo ./text.txt:6:sdf33oofdsfdsfd ./text.txt:8:dfsfdfdsfds=oo

注:-n 表示輸出對(duì)應(yīng)的行號(hào),正則表達(dá)式可以加單引號(hào)或者雙引號(hào),也可以不加引號(hào)。

查看指定的目錄下除了特定文件之外的文件內(nèi)容中含有指定關(guān)鍵詞的文件名

列出目錄 /etc 及其所有子目錄下的文件內(nèi)容含有關(guān)鍵詞“bash”的文件名,但是以 .conf 為后綴名的文件不在搜索范圍之內(nèi):

grep -Ril --exclude=*.conf bash /etc/*

注:--exclude 用來指定被排除的文件

限定在指定文件中進(jìn)行搜索

只在目錄 /etc 及其子目錄下的配置文件(擴(kuò)展名為 .conf)中搜索指定的字符串“bash”,并將匹配到的文件名輸出:

grep -Ril --include=*.conf bash /etc/*

在指定目錄下查找,并且將特定的目錄排除在搜索范圍之外

查看 /etc 及其子目錄中的內(nèi)容包含完整匹配字符串 stretch 的匹配項(xiàng)的文件名,但不包括 /etc/grub.d 目錄下的文件:

# grep --exclude-dir=/etc/grub.d -Rwl stretch /etc/* /etc/apt/sources.list /etc/dictionaries-common/words /etc/os-release

將指定目錄中的所有文件所包含的指定字符串替換成另外一個(gè)指定的字符串

將當(dāng)前目錄及其所有子目錄中的所有文件內(nèi)容中的關(guān)鍵詞“aliyun” 替換成“l(fā)wx”:

[cqs@centos7]$ sed -i "s/aliyun/lwx/g" `grep -rl aliyun ./`

注:后面的 grep 命令語句必須放在反撇號(hào)之內(nèi),這樣才會(huì)執(zhí)行該命令語句

六、grep 和 find 的區(qū)別

grep 是查找文本內(nèi)容,所以指定文件時(shí)則會(huì)進(jìn)入文件內(nèi)容中查找,而 find 是查找文件名,無法查找文件的內(nèi)容

總結(jié)

以上是生活随笔為你收集整理的Linux 命令之 grep -- 强大的文本搜索工具/正则表达式搜索的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。