linux匹配用法,Linux 匹配文字 grep 指令用法教學與範例

本篇介紹如何使用 Linux 的 grep 指令,根據關鍵字或正規表示法找出想要的資料。

Linux 的 grep 是一個很好用的指令,可以從串流資料或檔案中,使用關鍵字或正規表示法(regular expression)篩選出想要尋找的資料,並且顯示出來,以下是 grep 的用法教學以及實際範例。

grep 這個指令名稱其實是來自於正規表示法的 g/RE/p,其意義是代表以正規表示法全域搜尋並列印出來(globally search for RE and print it)。

搜尋關鍵字

grep 最基本的用法就是以普通的關鍵字來搜尋,其基本語法如下:grep 關鍵字 檔案1 檔案2 ...

例如在 /etc/os-release 檔案中搜尋 Ubuntu 關鍵字:# 在 /etc/os-release 檔案中搜尋 Ubuntu 關鍵字

grep Ubuntu /etc/os-releaseNAME="Ubuntu"

PRETTY_NAME="Ubuntu 18.04.3 LTS"

執行的結果會列出所有含有關鍵字的整行文字。

grep 亦可搭配萬用字元(*)同時搜尋多個檔案,例如在 /etc/ 目錄之下所有 *.conf 檔案中,尋找 network 這個字眼:# 在 /etc/*.conf 中搜尋 network 關鍵字

grep network /etc/*.confltrace.conf:hex(uint) inet_network(string);

nsswitch.conf:networks: files

sysctl.conf:# Additional settings - these settings can improve the network

sysctl.conf:# security of the host and prevent against some network attacks

sysctl.conf:# redirection. Some network environments, however, require that these

搜尋多個檔案時,在輸出中會標示資料來源是哪一個檔案。

除了搜尋檔案內容之外,亦可搭配管線(pipe)篩選串流資料,例如篩選出含有 network 關鍵字的檔案名稱:# 篩選含有 network 關鍵字的檔案名稱

ls /etc/ | grep networknetwork

networkd-dispatcher

networks

不分大小寫

grep 預設會區分字母的大小寫,如果希望以不分大小寫的方式搜尋,可以加上 -i 參數:# 不分大小寫

grep -i Ubuntu /etc/os-release

標示行號

若要標示匹配文字的行號,可以加上 -n 參數:# 標示行號

grep -n Ubuntu /etc/os-release1:NAME="Ubuntu"

5:PRETTY_NAME="Ubuntu 18.04.3 LTS"

反向匹配

若想要將匹配的資料排除,只顯示出沒有關鍵字的那幾行資料,可以加上 -v 參數。例如顯示不包含 Ubuntu 關鍵字的那幾行:# 顯示不包含 Ubuntu 關鍵字的行

grep -v Ubuntu /etc/os-release

遞迴搜尋檔案

如果想要在指定目錄與其子目錄下所有的檔案中,搜尋指定的關鍵字,可以加上 -r 參數:# 在 /etc/ 下所有檔案中搜尋 ubuntu

grep -r ubuntu /etc/

如果只想要從特定的檔案中尋找關鍵字,可以使用 -r 搭配 --include 指定檔案類型:# 在所有 *.conf 中尋找 ubuntu

grep -r --include="*.conf" ubuntu /etc/

如果自己的權限沒辦法讀取所有的檔案,就會出現某些檔案無法讀取的錯誤訊息,這時候可以將這種錯誤訊息導向 /dev/null,只看正常訊息就好:# 不顯示錯誤訊息

grep -r ubuntu /etc/ 2>/dev/null

顯示前後幾行

有時候只顯示匹配成功那一行,不容易看出是否是我們想要找的資料,這時候可以加上 -A(After)、-B(Before)或-C(Context),指定要顯示的前後行數:# 多顯示後一行

grep -A 1 Ubuntu /etc/os-release

# 多顯示前一行

grep -B 1 Ubuntu /etc/os-release

# 多顯示前後各一行

grep -C 1 Ubuntu /etc/os-release

顏色標示

grep 可以使用顏色標示的方式,將成功匹配的部分文字標示出來,方便使用者閱讀。顏色標示功能可以透過 --color=never、--color=always、--color=auto 這幾種參數來關閉、開啟或設為自動。開啟顏色標示的輸出會像這樣:

91f796d5911be972f6b4f0930cd6128b.png

grep 顏色標示

正規表示法

grep 在搜尋關鍵字時,其實是以正規表示法的方式匹配文字的,所以一般的正規表示法都可以直接使用,以下是一些常用的範例。開頭與結尾是最常用的:# a 開頭

ls | grep "^a"

# b 結尾

ls | grep "b$"

# a 或 b 開頭

ls | grep "^[ab]"

# a 或 b 結尾

ls | grep "[ab]$"

各種出現次數的指定:# a 開頭,接著 b 出現零次以上

ls | grep "^ab*"

# a 開頭,接著 b 出現零次或一次

ls | grep "^ab?"

# a 開頭,接著 b 出現一次以上

ls | grep "^ab+"

多種字眼的組合,也很常用:# 含有 ab 或 cd

ls | grep "ab|cd"

# 含有 ab 或 cd(另一種寫法,作用相同)

ls | grep -E "ab|cd"

如果只想要精準篩選出 net 這個單字,可以這樣寫:# 含有 net 這個單字

ls | grep ""issue.net

這樣就只會出現含有 net 這一個單字的結果,像是 network 這樣的字眼就會被排除。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值