久久国产乱子伦精品免费M,亚洲一区二区三区91,欧美国产在线视频,国产精品视频久久

Linux系統(tǒng)中查找文本的技巧你都掌握哪些?

今天馬哥教育要跟大家分享的文章是關(guān)于Linux系統(tǒng)中查找文本的技巧你都掌握哪些?之前小編也為大家分享過很多Linux相關(guān)的命令,但是對文件內(nèi)容搜索的命令似乎還沒有涉及,今天小編就為大家?guī)砹诉@篇文章,讓我們一起來看一看文件查找grep命令的相關(guān)知識。 Linux入門新手和正在Linux學(xué)習(xí)的小伙伴快來看一看吧,希望能夠?qū)Υ蠹矣兴鶐椭?/p>

一、常見用法

我們會經(jīng)常結(jié)合管道符(|)來使用它,即在前面命令執(zhí)行的結(jié)果中查找包含相關(guān)字符串的內(nèi)容。例如:

$ ps -ef|grep redis

ps -ef用于查看系統(tǒng)進(jìn)程情況,但是它列出的結(jié)果很多,如果我們只想看到自己需要的,則通過管道符,用grep進(jìn)行過濾搜索,例如搜索redis相關(guān)的進(jìn)程,最后它只會列出和redis相關(guān)的進(jìn)程了:

$ ps -ef|grep redis

root 10748 10733 0 21:14 pts/21 00:00:00 redis-server *:6379

root 10754 10733 0 21:14 pts/21 00:00:00 grep --color=auto redis

那么如果要排除某些不相關(guān)信息呢?我們可以使用-v參數(shù)

$ ps -ef|grep redis |grep -v auto

root 10748 10733 0 21:14 pts/21 00:00:00 redis-server *:6379

這樣一來,包含auto相關(guān)的結(jié)果就不會出現(xiàn)在最終結(jié)果里了。

如果只想統(tǒng)計結(jié)果數(shù)量呢?我們可以結(jié)合-c(count)參數(shù):

$ ps -ef|grep redis -c

2

二、文件內(nèi)容搜索

好了,說完了最常見的用法,我們來看看如何搜索文件內(nèi)容。實際上awk和sed在這方面也頗有經(jīng)驗,不過本文的主角是grep,所以另外兩個命令暫時不涉及。我們來看幾個實例。

三、在指定文件中查找指定關(guān)鍵字

例如,要在Linux_command_debug.md文件中,查找test字符串:

$ grep "test" aaa/bbb/Linux_command_debug.md

int test(int a,int b)

test(a,b);

如果想要顯示指定關(guān)鍵字的行號,可以使用-n參數(shù),例如:

$ grep -n "test" aaa/bbb/Linux_command_debug.md

18:int test(int a,int b)

27: test(a,b);

四、搜索時指定或排除多個文件

前面提到了對一個文件內(nèi)容進(jìn)行搜索,如果是多個呢?或者不想從某些文件里搜索呢?

如果想對文件進(jìn)行指定也是可以的,例如搜索所有的md結(jié)尾的文件:

$ grep -n "test" *.md

或者可以使用--exclude參數(shù)來排除某些文件,例如,查找包含test,但是排除txt文件:

$ grep -rn "test" --exclude=*.txt

搜索時就會忽略.txt結(jié)尾的文件了。

如果要排除的條件比較多,可以將要排除的條件存儲在另外一個文件里:

$ grep -rn "test" --exclude-from=skip.txt

skip.txt的內(nèi)容可以是模式匹配的文件名或者具體文件名:

*.txt

test.md

這樣,以.txt結(jié)尾,以及test.md文件都不會搜索了。

除此之外,還可以排除指定目錄,它需要用到--exclude-dir參數(shù):

$ grep -rn "test" --exclude-dir=aaa

它在搜索時將會跳過aaa目錄下的文件。

五、查找包含指定關(guān)鍵字的文件

如果要在當(dāng)前目錄下所有文件查找包含“int main(void)”字符串的文件:

$ grep -rn "int main(void)"

aaa/bbb/c_main_func.md:49:int main(void)

aaa/bbb/c_main_func.md:71:int main(void) { /* ... */ }

aaa/bbb/c_array.md:104:int main(void)

aaa/bbb/c_array.md:129:int main(void)

aaa/bbb/pc-lint.md:42:int main(void)

aaa/bbb/pc-lint.md:128:int main(void)

這可能是最實用的使用方法之一了。這里-r參數(shù)表示遞歸查找當(dāng)前目錄的文件,-n會顯示查找位置的行號,如果只想顯示包含該指定關(guān)鍵字的文件名,可使用-l(--file-with-matches)參數(shù):

$ grep -rln "int main(void)"

aaa/bbb/c_main_func.md

aaa/bbb/c_array.md

aaa/bbb/pc-lint.md

如果你嘗試一下就會發(fā)現(xiàn),如果不帶-r參數(shù),它會暫停,等待你從控制臺輸入,例如:

$ grep -n "test"

test

1:test

所以使用時記得帶上相關(guān)參數(shù)奧!

六、查找不包含指定關(guān)鍵字的文件

前面提到了如何查找包含某個關(guān)鍵字的文件,如果要找的是不包含該關(guān)鍵字的文件呢?

實際上只要使用-L參數(shù)即可:

$ grep -rLn "int main(void)"

(這里會顯示不包含指定關(guān)鍵字內(nèi)容的文件名)

七、搜索時忽略大小寫

使用-i(--ignore-case)參數(shù)即可:

$ grep -rni "int MAIN(void)"

aaa/bbb/c_main_func.md:49:int main(void)

aaa/bbb/c_main_func.md:71:int main(void) { /* ... */ }

aaa/bbb/c_array.md:104:int main(void)

aaa/bbb/c_array.md:129:int main(void)

aaa/bbb/pc-lint.md:42:int main(void)

aaa/bbb/pc-lint.md:128:int main(void)

八、搜索顯示不包含指定關(guān)鍵字的行

前面的大部分例子都是顯示符合條件的行,如果要顯示不符合條件的行呢?可以用我們前面提到的-v參數(shù):

$ grep -rnv "int main(void)"

(內(nèi)容較多,未顯示)

從結(jié)果中就會發(fā)現(xiàn),它會展示出包含指定關(guān)鍵字的文件,但是展示的是不包含該關(guān)鍵字的行。

九、顯示指定關(guān)鍵字前后內(nèi)容

假如你需要查看包含指定關(guān)鍵字行附近的行,前面的方式是沒有辦法看到的,不過我們可以用-A(--after-context=)和-B(--before-context=)參數(shù)來顯示前后的行:

$ grep -rn "int main(void)" -A 1 -B 1

aaa/bbb/c_array.md-103-}

aaa/bbb/c_array.md:104:int main(void)

aaa/bbb/c_array.md-105-{

(其他內(nèi)容省略)

通過最后加上-A和-B參數(shù),顯示了指定關(guān)鍵字前后的行,這在日志搜索分析時非常有用。

十、指定規(guī)則文件進(jìn)行搜索

如果有多個搜索關(guān)鍵字怎么處理呢?我們可以把關(guān)鍵字寫在一個文件,搜索時指定文件即可,例如規(guī)則文件為key.txt:

int main(void)

test

從指定文件中搜索上面的關(guān)鍵字:

$ cat filename |grep -f key.txt

這樣結(jié)果就會顯示匹配key.txt文件中所有關(guān)鍵字的行,非常適合用于多個條件的搜索。

十一、正則表達(dá)式搜索

看完前面的內(nèi)容,是不是還沒有感受到grep的強(qiáng)大?grep的另一個強(qiáng)大之處是,它的搜索支持正則表達(dá)式,例如查找文本行以t開頭,以t結(jié)尾的文件:

$ grep -rn ^t.*t$

key.txt:2:test

aaa/bbb/c_operate_redis_start.md:68:typedef struct Stu_Info_Struct

aaa/bbb/c_operate_redis_start.md:101:typedef struct Stu_Info_Struct

其中^t,表明以t開頭,t$表明以t結(jié)尾,如果需要使用擴(kuò)展的正則表達(dá)式進(jìn)行搜索,可使用egrep命令。關(guān)于正則表達(dá)式的寫法,本文不做詳細(xì)介紹。

總結(jié)

在內(nèi)容搜索方面,grep常常能夠助我們一臂之力,因此掌握grep的使用也是Linux學(xué)習(xí)不可缺少的一部分,當(dāng)然我們不需要完全記住每個參數(shù)的作用,但我們至少知道有這樣的參數(shù),并且在需要時能夠快速查詢到。本文常用參數(shù)如下:

· -v #顯示不包含匹配關(guān)鍵字的所有行。

· -l #顯示包含匹配關(guān)鍵字的文件

· -L #顯示不包含匹配關(guān)鍵字的文件

· -r #遞歸搜索

· -i #忽略大小寫

· -n #顯示關(guān)鍵字所在行號

· -A n #顯示關(guān)鍵字后n行

· -B n #顯示關(guān)鍵字前n行

· --exclude #搜索時排除某些文件

· --exclude-dir #搜索時排除某些目錄

· -f #指定規(guī)則文件進(jìn)行搜索

以上就是小編今天為大家分享的關(guān)于Linux系統(tǒng)中查找文本的技巧你都掌握哪些?的文章,希望本篇文章為大家介紹的Linux命令能夠?qū)π』锇閭冇兴鶐椭H绻阆胍私飧郘inux相關(guān)知識記得關(guān)注馬哥教育官網(wǎng)!最后祝愿小伙伴們工作順利!

聲明:文章來源于網(wǎng)絡(luò),侵刪!

相關(guān)新聞

歷經(jīng)多年發(fā)展,已成為國內(nèi)好評如潮的Linux云計算運維、SRE、Devops、網(wǎng)絡(luò)安全、云原生、Go、Python開發(fā)專業(yè)人才培訓(xùn)機(jī)構(gòu)!

    1. 主站蜘蛛池模板: 蓬安县| 姚安县| 凌海市| 林州市| 田东县| 游戏| 休宁县| 崇明县| 勃利县| 邵武市| 巴彦县| 玛纳斯县| 雅安市| 南乐县| 连南| 建湖县| 若尔盖县| 唐海县| 金乡县| 中超| 无锡市| 万载县| 临清市| 罗田县| 庆云县| 营山县| 上林县| 宁明县| 齐河县| 金门县| 晋城| 东源县| 寿宁县| 淳化县| 舟山市| 岗巴县| 霞浦县| 郴州市| 文山县| 和顺县| 柏乡县|