如何在 Linux 中使用 fgrep 命令搜索字符串
文本搜索是最常執(zhí)行的操作之一。然而,如果用戶不熟悉正確的工具,這個簡單的任務很快就會變得很耗時。在 Linux 中,有各種文本過濾實用程序,例如 awk、sed、cut等。
但是,在 Linux 中,fgrep 是簡單文本搜索的首選實用程序。在本指南中,我們將討論可在日常生活中使用的 fgrep 命令的一些實踐示例。
Linux 中的 fgrep 命令屬于grep 命令家族。但是,它用于搜索固定字符串模式而不是正則表達式。因此,該命令的名稱是fgrep(Fixed GREP)。
fgrep 命令的語法類似于其他 grep 系列命令:
首先,讓我們創(chuàng)建一個包含以下內容的純文本文件來使用示例:
在 Linux 中查看文件內容
在這里,我們可以看到文本文件已準備好包含示例內容?,F(xiàn)在讓我們在接下來的幾個示例中討論 fgrep 命令的一些常見示例。
1. fgrep 與 grep 和 egrep 命令有何不同?
顧名思義,fgrep 命令用于搜索固定字符串模式。它將模式解釋為固定字符串而不是正則表達式。因此,它以一種節(jié)省時間的方式執(zhí)行搜索操作。
為了理解差異,讓我們在 grep 命令中使用點(.)字符。
這個簡單的正則表達式匹配除行尾之外的任何單個字符:
使用 Grep 搜索單個字符
在上面的輸出中,我們可以看到點(.)字符與文本at、atc和att匹配。
現(xiàn)在,讓我們對 fgrep 命令使用相同的模式并觀察結果:
在上面的輸出中,我們可以看到該命令無法找到給定的模式。
發(fā)生這種情況是因為 fgrep 命令無法識別正則表達式并嘗試搜索不存在的模式 – “at.”。
2. 如何在文件中搜索字符串
讓我們從基本示例開始,我們將在 linuxmi.txt 文件中搜索字符串 matches:
在文件中搜索字符串
正如我們所看到的,成功在兩個地方匹配成功,并以紅色突出顯示。
3. 如何設置匹配模式的 Grep 輸出顏色
在前面的示例中,我們看到,默認情況下,匹配的模式以紅色突出顯示。但是,我們可以通過為 GREP_COLOR 環(huán)境變量分配不同的值來改變這種行為。
讓我們將值32分配給GREP_COLOR環(huán)境變量以高亮顯示綠色的匹配模式:
為匹配模式設置 Grep 輸出顏色
現(xiàn)在,在轉到下一個示例之前,取消設置 GREP_COLOR 環(huán)境變量以啟用默認行為:
4.如何在一個文件中搜索多個模式
有時,我們需要對多個字符串進行模式匹配。在這種情況下,我們可以提供文本文件中的模式而不是命令行參數(shù)。
讓我們創(chuàng)建一個文本文件,在單獨的一行中包含多個模式:
現(xiàn)在,讓我們將此文件與-f多個模式匹配選項一起使用:
使用 fgrep 搜索多個模式
在上面的輸出中,我們可以看到字符串professionals和website的模式匹配成功。
5.如何限制文件中的匹配數(shù)
默認情況下,fgrep 命令會繼續(xù)執(zhí)行模式匹配,直到處理完整個文件。
但是,有時我們需要限制匹配的數(shù)量。在這種情況下,我們可以-m在命令中使用該選項:
在此示例中,fgrep命令在匹配第一個模式后停止文件處理。
6. 查找模式時如何打印文件名
有時,我們只需要找到存在特定模式的文件的名稱。在這種情況下,我們可以使用 fgrep 命令的-l選項:
在這里,我們可以看到該命令只打印文件名而不是具有匹配模式的行。
7.模式匹配失敗時如何打印文件名
在前面的示例中,我們看到了如何在模式匹配成功時打印文件名。現(xiàn)在,讓我們看看如何以相反的方式執(zhí)行操作。
讓我們嘗試在文件中找到不存在的模式并觀察結果:
在這個例子中,我們使用了-L當模式匹配不成功時打印文件名的命令選項。
8. 如何忽略錯誤信息
在編寫 shell 腳本時,錯誤處理起著至關重要的作用。但是,在一些非關鍵場景中,我們可以安全地忽略錯誤消息。
在fgrep中,我們可以使用-s 忽略與不存在或不可讀文件相關的錯誤的選項。為了更好地理解這種行為,讓我們嘗試在不存在的文件中搜索模式:
在上面的輸出中,我們可以看到該命令沒有在標準錯誤流中顯示任何錯誤。但是,失敗是由非零返回值報告的。
除此之外,我們還可以在文件不可讀時觀察到相同的行為。因此,首先,使用chmod命令修改文件權限:
現(xiàn)在,嘗試搜索模式并觀察結果:
Grep 忽略錯誤信息