6 個使用正則表達式搜索文本中內容的工具

本指南介紹了一些命令行工具,這些工具可用於搜索文本文件中的匹配字符串或模式。這些工具通常與正則表達式一起使用。

grep 命令

首先出現的是 grep 實用工具——它是Global Regular Expression Print的首字母縮寫,是一種強大的命令行工具,在搜索文件中的特定字符串或模式時非常方便。

例如,要在忽略大小寫的情況下搜索文件sshd_conf.txt中包含ssh字符串的行,請運行以下命令:

[root@localhost ~]# grep -i ssh sshd_conf.txt

想要了解更多關於 grep 命令的使用方式,可以查看 grep 的手冊:man grep

sed 命令

sed 是 Stream Editor 的縮寫,用於操作文本文件中的文本。sed 以非交互方式搜索、篩選和替換給定文件中的字符串。

默認情況下,sed 命令將輸出打印到標準輸出,這意味着執行的結果打印在終端上,而不是保存在文件中。

例如,將文件/etc/selinux/config中的SELINUX=enforcing改成SELINUX=disabled,請調用以下命令:

[root@localhost ~]# sed -i '/^SELINUX=/s/enforcing/disabled/g' /etc/selinux/config


修改之後,保存退出,重啓操作系統,這樣可以關閉 selinux。

想要了解更多關於 sed 命令的使用方式,可以查看 sed 的手冊:man sed

ack 命令

Ack 是用 Perl 編寫的快速且可移植的命令行工具。Ack 被認爲是 grep 的替代品,並以視覺吸引人的方式輸出結果。Ack 命令在文件或目錄中搜索包含與搜索條件匹配的行。然後突出顯示各行中的匹配字符串。

安裝方式 (Centos7 系統):

[root@localhost ~]# yum -y install ack

例如,要在 sshd_conf.txt 中查找包含 ssh 的行,不區分大小寫,請運行:

[root@localhost ~]# ack -i ssh sshd_conf.txt

搜索出來的關鍵字會以高亮的方式顯示出來。

搜索工具非常智能,如果用戶未提供文件或目錄,它會在當前目錄和子目錄中搜索。在下面的示例中,沒有提供文件或目錄,但是 ack 自動檢測到了目錄和子目錄中匹配字符串的文件裏面的行:

[root@localhost ~]# ack -i ssh

想要了解更多關於 ack 命令的使用方式,可以查看 ack 的手冊:man ack

awk 命令

awk 是一種成熟的腳本語言,也是文本處理和數據處理工具。讓我們以最簡單的例子爲例。假設正在打印系統日期,只想打印第一個值,即星期幾。在這種情況下,將輸出通過管道傳輸到 awk 中,如下所示:

[root@localhost ~]# date
Mon Nov 23 10:47:42 CST 2020
[root@localhost ~]# date |awk '{print $1}'
Mon

要顯示後面的值,請使用逗號分隔它們,如下所示:

[root@localhost ~]# date |awk '{print $6,$2,$3}'
2020 Nov 23

想要了解更多關於 awk 命令的使用方式,可以查看 awk 的手冊:man awk

****|  Silver Searcher 工具

Silver Searcher 是一個類似於 ack 的跨平臺和開源代碼搜索工具,但注重速度。它可以在最短的時間內輕鬆搜索文件中的特定字符串:

安裝方式 (Centos7):

[root@localhost ~]# yum -y install epel-release && yum makecache
[root@localhost ~]# yum -y install the_silver_searcher

例如,在/etc/passwd文件中搜索字符串 "nologin",使用以下命令:

[root@localhost ~]# ag nologin /etc/passwd

想要了解更多關於 Silver Searcher 工具的使用方式,可以查看 ag 的手冊:man ag

ripgrep 工具

ripgrep 命令行工具。Ripgrep 是用於正則表達式模式的跨平臺實用程序。它比前面提到的所有搜索工具速度都快得多,並且可以遞歸搜索目錄以找到匹配的模式。在速度和性能方面,沒有其他工具比 Ripgrep 出色。

默認情況下,ripgrep 將跳過二進制文件 / 隱藏的文件和目錄。另外,在默認情況下,它不會搜索被. gitignore / .ignore / .rgignore 文件忽略的文件。

安裝 ripgrep(Centos7):

[root@localhost ~]# yum -y install yum-utils
[root@localhost ~]# sudo yum-config-manager --add-repo=https://copr.fedorainfracloud.org/coprs/carlwgeorge/ripgrep/repo/epel-7/carlwgeorge-ripgrep-epel-7.repo
[root@localhost ~]# yum -y install ripgrep

例如,要在當前目錄內的文件中搜索字符串 “Linux”,請運行以下命令:

[root@localhost ~]# rg Linux

想要了解更多關於 ripgrep 命令的使用方式,可以查看 rg 的手冊:man rg

總結

這些是 Linux 中用於搜索、過濾和操作文本的最廣泛使用的命令行工具。

本文由 Readfog 進行 AMP 轉碼,版權歸原作者所有。
來源https://mp.weixin.qq.com/s/nVXjfCDm6dXk4Af2xdi4iA