Linux操作系統»Linux中的grep命令。 完整指南

Linux grep實用程序用於過濾輸出或搜索文件中的特定單詞。 這篇文章將介紹Linux中grep實用程序可用的基本選項。

Grep簡短格式(全球常規 Ë壓縮和打印)。 在基本層面上 grep命令 Linux中的“ Linux”用於使用某種形式的正則表達式來搜索或過濾簡單的文本數據。

Linux grep命令和選項

在檢查grep命令之前,讓我們看一下它的基本語法。

grep命令的基本語法

cat <file name>|grep <string or regular expression>
 
<command>|grep <string or regular expression>
 
grep <string or regular expression> [file name]

grep命令的選項

1.簡單的文件搜索

讓我們看一下/ etc / passwd文件中的示例,以在文件中查找字符串。 要使用grep查找單詞“ system”,請使用以下命令:

[[email protected] ~]# cat /etc/passwd|grep system

輸出示例:

systemd-bus-proxy:x:899:897:systemd Bus Proxy:/:/sbin/nologin
systemd-network:x:898:896:systemd Network Management:/:/sbin/nologin

2.計算單詞的出現。

在上面的示例中,我們在系統中搜索文件中的單詞

e“ / etc / passwd”。 如果我們想知道文件中單詞的出現次數或次數,請使用以下選項:

[[email protected] ~]# cat /etc/passwd|grep -c system
2
[[email protected] ~]#

上面指出,該單詞在文件“ / etc / passwd”中出現了兩次。

3.忽略區分大小寫的單詞

Grep區分大小寫,這意味着它將僅搜索文件中的給定單詞。 要測試此功能,請創建一個名為“ test.txt”的文件,其內容如下所示:

[[email protected] tmp]# cat test.txt
AndreyEx
andreyex
ANDREYEX
Andreyex
[[email protected] tmp]#

現在,如果您嘗試查找字符串“ grayex”,那麼該命令將不會列出具有不同變體的所有單詞“ grayex”,如下所示:

[[email protected] tmp]# grep andreyex test.txt
andreyex
[[email protected] tmp]#

該結果證實僅將顯示一個變體,而忽略具有不同變體的單詞“ andreyex”的其餘部分。 而且,如果您想忽略這種情況,則需要對grep使用“ -i”選項,如下所示:

[[email protected] tmp]# grep -i andreyex test.txt
AndreyEx
andreyex
ANDREYEX
Andreyex

4.使用grep命令在文件中的兩行不同

現在,如果要使用grep命令搜索兩個單詞或兩行,則必須指定擴展。 在下一個命令中,我們在/ etc / passwd文件中找到兩行“ system”和“ nobody”。

[[email protected] ~]# grep  'system|nobody' /etc/passwd
nobody:x:89:89:Nobody:/:/sbin/nologin
systemd-bus-proxy:x:899:897:systemd Bus Proxy:/:/sbin/nologin
systemd-network:x:898:896:systemd Network Management:/:/sbin/nologin
[[email protected] ~]#

5.遞歸搜索

假設您要遞歸地在目錄中的任何位置查找單詞或字符串,然後使用-r選項。 例如,如果要在/ etc目錄中遞歸找到單詞“ check_oracle”,請使用以下命令:

[[email protected] ~]# grep -r "check_oracle" /etc/
/etc/selinux/targeted/contexts/files/file_contexts:/usr/lib/nagios/plugins/check_oracle --      system_u:object_r:nagios_services_plugin_exec_t:s0
Binary file /etc/selinux/targeted/contexts/files/file_contexts.bin matches
/etc/selinux/targeted/modules/active/file_contexts:/usr/lib/nagios/plugins/check_oracle --      system_u:object_r:nagios_services_plugin_exec_t:s0
/etc/selinux/targeted/modules/active/file_contexts.template:/usr/lib/nagios/plugins/check_oracle        --      system_u:object_r:nagios_services_plugin_exec_t:s0
[[email protected] ~]

在上面的輸出中,我們可以看到在其中找到該行的文件的名稱,如果要從最終結果中刪除文件名,請使用“ -h”選項,如下所示:

[[email protected] ~]# grep -hr "check_oracle" /etc/
/usr/lib/nagios/plugins/check_oracle    --      system_u:object_r:nagios_services_plugin_exec_t:s0
Binary file /etc/selinux/targeted/contexts/files/file_contexts.bin matches
/usr/lib/nagios/plugins/check_oracle    --      system_u:object_r:nagios_services_plugin_exec_t:s0
/usr/lib/nagios/plugins/check_oracle    --      system_u:object_r:nagios_services_plugin_exec_t:s0
[[email protected] ~]#

6. grep命令的輸出。

如果要在命令的任何輸出中搜索行或單詞,則必須在grep中使用“ |”運算符,後跟。 假設您要在內存中搜索dmesg命令輸出的關聯詞,然後使用以下命令。

	
[[email protected] ~]# dmesg |grep memory
[    0.000000] Base memory trampoline at [ffff880000098000] 98000 size 19456
[    0.000000] init_memory_mapping: [mem 0x00000000-0x000fffff]
[    0.000000] init_memory_mapping: [mem 0x3fe00000-0x4fffffff]
[    0.000000] init_memory_mapping: [mem 0x3c000000-0x4fdfffff]
[    0.000000] init_memory_mapping: [mem 0x00100000-0x4bffffff]
[    0.000000] kexec: crashkernel=auto resulted in zero bytes of reserved memory.
[    0.000000] Early memory node ranges
[    0.000000] PM: Registered nosave memory: [mem 0x0003e000-0x0003ffff]
[    0.000000] PM: Registered nosave memory: [mem 0x000a0000-0x000dffff]
[    0.000000] PM: Registered nosave memory: [mem 0x000e0000-0x000fffff]
[    0.000000] please try 'cgroup_disable=memory' option if you don't want memory cgroups
[    0.030181] Initializing cgroup subsys memory
[    0.862358] Freeing initrd memory: 23532k freed
[    1.064599] Non-volatile memory driver v1.3
[    1.069351] crash memory driver: version 1.1
[    1.186673] Freeing unused kernel memory: 1430k freed
[    5.567780] [TTM] Zone  kernel: Available graphics memory: 480345 kiB
[[email protected] ~]#

7.在Linux中使用grep命令反轉

假設如果要顯示文件中不包含任何特定單詞的所有單詞,請使用“ -v”選項。 這使您可以創建一個內容如下的文件:

[[email protected] tmp]# cat test.txt
Andreyex12
Andreyex454
Andreyex34343
Andreyex
LinuxRoutes
Linux
[[email protected] tmp]#

如果我們不想打印包含Linux一詞的行,請使用以下命令。

[[email protected] tmp]# grep -v Linux test.txt
Andreyex12
Andreyex454
Andreyex34343
Andreyex

8.精確的單詞匹配

根據第7點的示例,如果我們搜索Andreyex,則它將所有出現的Andreyex打印為“ Andreyex12”,“ Andreyex454”,“ Andreyex34343”以及“ Andreyex”,如下所示:

[[email protected] tmp]# grep  Andreyex test.txt
Andreyex12
Andreyex454
Andreyex34343
Andreyex
[[email protected] tmp]#

那麼,如果我們想找到確切的單詞“ Andreyex”而不是上面列出的所有輸出,則使用“ -w”選項,如下所示:

[[email protected] tmp]# grep -w Andreyex test.txt
Andreyex
[[email protected] tmp]#

Sidebar