1. 程式人生 > >Linux之grep和egrep命令總結

Linux之grep和egrep命令總結

grep / egrep




語法: grep  [-cinvABC]  'word'  filename


-c :列印符合要求的行數
-i :忽略大小寫
-n :在輸出符合要求的行的同時連同行號一起輸出
-v :列印不符合要求的行
-A :後跟一個數字(有無空格都可以),例如 A2則表示列印符合要求的行以及下面兩行
-B :後跟一個數字,例如 B2 則表示列印符合要求的行以及上面兩行
-C :後跟一個數字,例如 C2 則表示列印符合要求的行以及上下各兩行




把包含 ‘halt’ 的行以及這行下面的兩行都打印出。
[[email protected] ~]# grep -A2 'halt' /etc/passwd
halt:x:7:0:halt:/sbin:/sbin/halt
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
uucp:x:10:14:uucp:/var/spool/uucp:/sbin/nologin


把包含 ‘halt’ 的行以及這行上面的兩行都打印出。
[
[email protected]
~]# grep -B2 'halt' /etc/passwd
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt


把包含 ‘halt’ 的行以及這行上面和下面的各兩行都打印出。
[[email protected] ~]# grep -C2 'halt' /etc/passwd
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
uucp:x:10:14:uucp:/var/spool/uucp:/sbin/nologin








過濾出帶有某個關鍵詞的行並輸出行號 
[
[email protected]
~]# grep -n 'root' /etc/passwd
1:root:x:0:0:root:/root:/bin/bash
11:operator:x:11:0:operator:/root:/sbin/nologin




過濾不帶有某個關鍵詞的行,並輸出行號 
[[email protected] ~]# grep -nv 'nologin' /etc/passwd
1:root:x:0:0:root:/root:/bin/bash
6:sync:x:5:0:sync:/sbin:/bin/sync
7:shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
8:halt:x:7:0:halt:/sbin:/sbin/halt
26:test:x:511:511::/home/test:/bin/bash
27:test1:x:512:511::/home/test1:/bin/bash


過濾出所有包含數字的行 
[
[email protected]
~]# grep '[0-9]' /etc/inittab
# upstart works, see init(5), init(8), and initctl(8).
#   0 - halt (Do NOT set initdefault to this)
#   1 - Single user mode
#   2 - Multiuser, without NFS (The same as 3, if you do not have networking)
#   3 - Full multiuser mode
#   4 - unused
#   5 - X11
#   6 - reboot (Do NOT set initdefault to this)
id:3:initdefault:




過濾出所有不包含數字的行 
[[email protected] ~]# grep -v '[0-9]' /etc/inittab
# inittab is only used by upstart for the default runlevel.
#
# ADDING OTHER CONFIGURATION HERE WILL HAVE NO EFFECT ON YOUR SYSTEM.
#
# System initialization is started by /etc/init/rcS.conf
#
# Individual runlevels are started by /etc/init/rc.conf
#
# Ctrl-Alt-Delete is handled by /etc/init/control-alt-delete.conf
#
# Terminal gettys are handled by /etc/init/tty.conf and /etc/init/serial.conf,
# with configuration in /etc/sysconfig/init.
#
# For information on how to write upstart event handlers, or how
#
# Default runlevel. The runlevels used are:
#




把所有以 ‘#’ 開頭的行去除 
[[email protected] ~]# grep -v '^#' /etc/inittab
id:3:initdefault:


去除所有空行和以 ‘#’ 開頭的行 
[[email protected] ~]# grep -v '^#' /etc/crontab |grep -v '^$'
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
HOME=/


在正則表示式中, “^” 表示行的開始, “$” 表示行的結尾,那麼空行則可以用 “^$” 表示,如何打印出不以英文字母開頭的行呢?


[[email protected] ~]# vim test.txt
[[email protected] ~]# cat test.txt
123
abc
456
abc2323
#laksdjf
Alllllllll


先在test.txt中寫幾行字串,用來做實驗。


[[email protected] ~]# grep '^[^a-zA-Z]' test.txt
123
456
#laksdjf


[[email protected] ~]# grep '[^a-zA-Z]' test.txt
123
456
abc2323
#laksdjf


如果是數字的話就用[0-9]這樣的形式,當然有時候也可以用這樣的形式[15]即只含有1或者5,注意,它不會認為是15。如果要過濾出數字以及大小寫字母則要這樣寫[0-9a-zA-Z]。另外[ ]還有一種形式,就是[^字元] 表示除[ ]內的字元之外的字元。


過濾任意一個字元與重複字元 
[[email protected] ~]# grep 'r..o' /etc/passwd
operator:x:11:0:operator:/root:/sbin/nologin
gopher:x:13:30:gopher:/var/gopher:/sbin/nologin
vcsa:x:69:69:virtual console memory owner:/dev:/sbin/nologin
. 表示任意一個字元,上例中,就是把符合r與o之間有兩個任意字元的行過濾出來, * 表示零個或多個前面的字元。


[[email protected] ~]# grep 'ooo*' /etc/passwd
root:x:0:0:root:/root:/bin/bash
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
uucp:x:10:14:uucp:/var/spool/uucp:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
postfix:x:89:89::/var/spool/postfix:/sbin/nologin
‘ooo*’ 表示oo, ooo, oooo ... 或者更多的 ‘o’ 現在你是否想到了 ‘.*’ 這個組合表示什麼意義?


[[email protected] ~]# grep '.*' /etc/passwd |wc -l
27
[[email protected] ~]# wc -l /etc/passwd
27 /etc/passwd
‘.*’ 表示零個或多個任意字元,空行也包含在內。


指定要過濾字元出現的次數 
[[email protected] ~]# grep 'o\{2\}' /etc/passwd
root:x:0:0:root:/root:/bin/bash
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
uucp:x:10:14:uucp:/var/spool/uucp:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
postfix:x:89:89::/var/spool/postfix:/sbin/nologin


也可以不用脫意符\  加上-E
grep -E  'o{2}' /etc/passwd


這裡用到了{ },其內部為數字,表示前面的字元要重複的次數。上例中表示包含有兩個o 即 ‘oo’ 的行。注意,{ }左右都需要加上脫意字元 ‘\’, 另外,使用{ }我們還可以表示一個範圍的,具體格式是 ‘{n1,n2}’ 其中n1<n2,表示重複n1到n2次前面的字元,n2還可以為空,則表示大於等於n1次。


上面部分講的grep,另外常常用到egrep這個工具,簡單點講,後者是前者的擴充套件版本,我們可以用egrep完成grep不能完成的工作,當然了grep能完成的egrep完全可以完成。如果你嫌麻煩,egrep瞭解一下即可,因為grep的功能已經足夠可以勝任你的日常工作了。下面介紹egrep不用於grep的幾個用法。為了試驗方便,把test.txt 編輯成如下內容:


rot:x:0:0:/rot:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
operator:x:11:0:operator:/rooot:/sbin/nologin
roooot:x:0:0:/rooooot:/bin/bash
1111111111111111111111111111111
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa




篩選一個或一個以上前面的字元 
[[email protected] ~]# egrep 'o+' test.txt
rot:x:0:0:/rot:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
operator:x:11:0:operator:/rooot:/sbin/nologin
roooot:x:0:0:/rooooot:/bin/bash
[[email protected] ~]# egrep 'oo+' test.txt
operator:x:11:0:operator:/root:/sbin/nologin
operator:x:11:0:operator:/rooot:/sbin/nologin
roooot:x:0:0:/rooooot:/bin/bash
[[email protected] ~]# egrep 'ooo+' test.txt
operator:x:11:0:operator:/rooot:/sbin/nologin
roooot:x:0:0:/rooooot:/bin/bash








篩選零個或一個前面的字元 
[[email protected] ~]# egrep 'o?' test.txt
rot:x:0:0:/rot:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
operator:x:11:0:operator:/rooot:/sbin/nologin
roooot:x:0:0:/rooooot:/bin/bash
1111111111111111111111111111111
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
[[email protected] ~]# egrep 'ooo?' test.txt
operator:x:11:0:operator:/root:/sbin/nologin
operator:x:11:0:operator:/rooot:/sbin/nologin
roooot:x:0:0:/rooooot:/bin/bash
[[email protected] ~]# egrep 'oooo?' test.txt
operator:x:11:0:operator:/rooot:/sbin/nologin
roooot:x:0:0:/rooooot:/bin/bash


篩選字串1或者字串2 
[[email protected] ~]# egrep 'aaa|111|ooo' test.txt
operator:x:11:0:operator:/rooot:/sbin/nologin
roooot:x:0:0:/rooooot:/bin/bash
1111111111111111111111111111111
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa


egrep中( )的應用 
[[email protected] ~]# egrep 'r(oo)|(at)o' test.txt
operator:x:11:0:operator:/root:/sbin/nologin
operator:x:11:0:operator:/rooot:/sbin/nologin
roooot:x:0:0:/rooooot:/bin/bash
用( )表示一個整體,例如(oo)+就表示1個 ‘oo’ 或者多個 ‘oo’


[[email protected] ~]# egrep '(oo)+' test.txt
operator:x:11:0:operator:/root:/sbin/nologin
operator:x:11:0:operator:/rooot:/sbin/nologin
roooot:x:0:0:/rooooot:/bin/bash

相關推薦

Linuxgrepegrep命令總結

grep / egrep 語法: grep  [-cinvABC]  'word'  filename -c :列印符合要求的行數 -i :忽略大小寫 -n :在輸出符合要求的行的同時連同行號一起輸出 -v :列印不符合要求的行 -A :後跟一個數字(有無空格都可以),例如 A2則表示列印符合要求的行以及下面

linuxgrepegrep,fgrep的區別

matches lis div 錯誤信息 基本命令 反向 字數 without 次數 https://blog.csdn.net/xiaoxinyu316/article/details/46729443 例子:1. :格式: grep [option] pattern f

Linuxgrepegrep使用

grep簡介   grep 是一種強大的文字搜尋工具,它能使用正則表示式搜尋文字,並把匹配的行打印出來。通常grep有三種版本grep、egrep(等同於grep -E)和fgrep。egrep為擴充套件的grep,fgrep則為快速grep(固定的字串來對文字進行搜尋,不支援正則表示式的引用但

編程語言和shell編程的基礎內容以及grepegrep命令及相應的正則表達式用法

編程語言和shell編程的基礎內容以及grep、egrep命令及相應的正則表達式和用法bash的特性之多命令執行的邏輯關系: 1.命令替換(命令之間無明確的邏輯依賴關系) COMMAND1 $(COMMAND2) 2.管道(命令之間無明確的邏輯依賴關系) COMMAND1 | COMMAND2

linux磁盤管理dfdu命令

director comm 方式 問題 參數 war 管理 缺省 ID df 查看已掛載磁盤的總容量、使用容量、剩余容量等,可以不加任何參數,默認是按k為單位顯示的 df常用參數有 –i -h -k –m等 -i 使用inodes 顯示結果 -h 使用合適的單位顯示

第十六章 在文件中搜索文本工具:grep命令 egrep命令

oot his a-z 多個 查找 sea 內容 args lar 第十六章 在文件中搜索文本工具:grep命令 和egrep命令 名詞解釋 grep(global search regular expression(RE)and print out the line,全面

Linuxgrep命令

linu global 轉義 命令 點號 正則表達式grep -- ole 前三 global search regular expression(RE) and print out the line 一、命令形式 1. grep -n --color=auto ‘st

Linux基礎知識chattrlsattr命令詳解

有時候你發現通過root使用者都不能修改某個檔案,大部分原因是曾經用chattr命令鎖定該檔案了。chattr命令的作用很大,其中一些功能是由Linux核心版本來支援的,不過現在生產絕大部分跑的linux系統都是2.6以上核心。通過chattr命令修改屬效能夠提高系統的安全性,但是它並不適合所有的目

關於linux下使用grepegrep中單引號‘’、雙引號“”、小括號()大括號{}的一些問題

最近在linux下使用grep和egrep發現了一些問題。以前一直以為egrep包含了grep,因此grep中採用的格式,在egrep中能得到相同的結果。其實這個想法是不對的。 原因主要是在於正則表示式和擴充套件正則表示式的一些元符號上的問題,在這篇帖子(http://w

Linux基礎grepegrepfgrep

grep、egrep和fgrep簡介 三者之間的關係:grep -E 等同於 egrep,grep -F 等同於 fgrep。 命令 是否支援正則 支援的正則型別 grep ☑️

Linux使用者使用者組管理-使用者組管理命令

二、修改使用者組[[email protected]~]#groupmod [選項] 組名選項:-g GID:修改組ID-n 新組名:修改組名 例子:[[email protected]~]#groupmod -n testg hhhg 把組名hhhg修改為testg

linux萬用字元,grep egrep區別

前些天寫字串匹配的指令碼,如下:   1 #!/bin/sh   2   3 echo"path: /home/appadmin/workspace"   4 echo"usage: "$0" [h|cpp|both|all] string_symbol"   5 ech

Linux 程序通訊 ——訊號訊號量總結

現在最常用的程序間通訊的方式有:訊號,訊號量,訊息佇列,共享記憶體。       所謂程序通訊,就是不同程序之間進行一些"接觸",這種接觸有簡單,也有複雜。機制不同,複雜度也不一樣。通訊是一個廣義上的意義,不僅僅指傳遞一些massege。他們的使用方法是基本相同的,所以只要

Linux中renamemv命令用法學習修改檔名區別總結

如何用命令修改檔名呢?在Linux下可以用rename命令,當然還可以使用mv命令,這裡分享下Linux rename命令的用法。 有一部分人說Linux下沒有rename命令,建議大家用mv命令。 對rename命令和mv命令在重新命名檔案方面做一個比較,大家根據個人

linux,rmpyum命令

所有 信息 解壓 python alt 出現 httpd zlib 光驅 作業一:rpm命令1) 掛載光盤文件到/media目錄 2) 進去/media目錄下的Packages目錄 3) 查看系統已安裝的所有rpm包 4) 查看系統是否安裝dhcp軟件包

grepegrep正則表達式

line 能夠 生成 net tab 結果 功能 num regular Linux上文本處理三劍客 grep :文本過濾( 模式:pattern) 工具; grep, egrep, fgrep (不支持正則表達式搜索,但搜索純文本的數據最快) sed :stream e

linux的dudf命令

documents master root權限 linux 今天也有同學問我Linux下查看目錄大小的命令,現在也將前陣子學習到du/df兩個命令總結一下吧。前陣子測試工作中有遇到過由於磁盤空間滿導致程序無法執行到情況,所以使用了df和du兩個命令。du查看目錄大小,df查看磁盤使用情況。我常

Linux中moreless命令用法

時間 quit ron 忽略 分頁 page tab 易用 linux中 一、more命令 more功能類似 cat ,cat命令是整個文件的內容從上到下顯示在屏幕上。 more會以一頁一頁的顯示方便使用者逐頁閱讀,而最基本的指令就是按空白鍵(space)就往下一頁顯示,按

Linux 系統lsblkblkid命令

所有 mapper dev name xfs 塊設備 swa 3-9 per lsblk命令用於以樹狀的格式顯示所有可用的塊設備信息: [[email protected]/* */ ~]# lsblk NAME MAJ:MIN RM S

Linux輸入輸出以及vim命令總結

/etc/一、管理輸入輸出在linux系統中,正確輸出的編號為1,錯誤輸出編號為2在系統中用普通用戶執行 "student"find /etc/ -name passwd > file因為student並沒有查看更多密碼的權利,所以只能在shell裏面顯示已經查找到但是沒有權利查看的文件而以stud