1. 程式人生 > >【linux shell】grep 常用選項

【linux shell】grep 常用選項

color選項增加顏色渲染

使用拓展正則表示式

如果要使用正則表示式,需要新增-E選項——這意味著使用擴充套件(extended)正則表示式。或者也可以使用預設允許正則表示式的grep命令——egrep。例如:

$ grep -E "[a-z]+" filename 
#或者 
$ egrep "[a-z]+" filename

僅輸出匹配結果

使用 -o

[root@CentOS ~]# grep word readme
this is the line containing word
[root@CentOS ~]# grep word readme -o
word

翻轉匹配

-v, --invert-match翻轉匹配即是將不屬於模式的內容輸出

[root@CentOS ~]# grep -v word readme 
this is a simple line.

輸出匹配行或者匹配項個數


[root@CentOS ~]# cat readme
this is the line containing word, word
this is a simple line.

[root@CentOS ~]# grep -c word readme 
1
[root@CentOS ~]# grep -o word readme  |wc -l
2

輸出匹配檔案

-l

[root@CentOS ~]# grep -l word readme out.html 
readme

輸出行號

-n

Perl正則表示式

-P

位元組偏移

-b

-b, --byte-offset
              Print  the 0-based byte offset within the input file before each line of output.  If -o (--only-matching) is specified, print the offset
              of
the matching part itself.

-o 只輸出匹配單詞結果

[[email protected] ~]# grep -b -o word readme 
28:word
34:word
39:word
[[email protected] ~]# cat readme
this is the line containing word, word
word
this is a simple line.

遞迴搜尋檔案

-R

[edemon@CentOS tmp]$ grep "open" . -R 
./write.c:  int fd = open("./tmp.txt",O_WRONLY|O_CREAT|O_TRUNC,0644);
./write.c:      perror("tmp.txt open wrongly");

忽略大小寫

-i

[edemon@CentOS tmp]$ echo "HAha" |grep -i "haha"
HAha

多模式匹配

使用-e選項

[edemon@CentOS tmp]$ echo this is a line |grep -e "is" -e "line" -o
is
is
line

使用檔案

[edemon@CentOS tmp]$ echo -e "is\nline" > pattern_txt
[edemon@CentOS tmp]$ cat pattern_txt 
is
line

[edemon@CentOS tmp]$ echo this is a line |grep -f pattern_txt -o
is
is
line

搜尋時包括檔案或排除檔案

includeexclude

[edemon@CentOS tmp]$ grep "open" . -r --include *.c
./write.c:  int fd = open("./tmp.txt",O_WRONLY|O_CREAT|O_TRUNC,0644);
./write.c:      perror("tmp.txt open wrongly");
[edemon@CentOS tmp]$ grep "open" . -r --exclude *.c

排除目錄:--exclude-dir
從檔案中讀取所需排除的檔案列表: --exclude-from FILE

靜默輸出

-q選項可以使得grep不輸出任何東西到stdout。即使出現出錯。
當返回值是0時,則找到了物件。非0則沒找到。

[edemon@CentOS workspace]$ cat auto.c |grep -q longjmp
[edemon@CentOS workspace]$ echo $?
0

匹配文字上下文輸出

#輸出4後面2行
[edemon@CentOS workspace]$ seq 10 |grep 4 -A 2
4
5
6
#輸出4前面2行
[edemon@CentOS workspace]$ seq 10 |grep 4 -B 2
2
3
4
#輸出4前後兩行
[edemon@CentOS workspace]$ seq 10 |grep 4 -C 2
2
3
4
5
6

其他

這裡寫圖片描述

edemon@linux:~$ cat tt
“在這個世界上,分裂是最大的痛苦,堤壩的分裂會導致洪災,地表的分裂會導致地震,山巒的分裂會帶來山崩,愛情的分裂會帶來離婚,同樣你和自我的分裂會帶來一生的痛苦和遺憾。人生最大的痛苦莫過於知道該怎麼做卻沒有去做,你會自責,你會對自己不滿意,你會覺得自己是渺小的、不講信譽不可信的。總而言之,就是你開始不信任自己,自信心降低了。”


真正能自控的人是內心和諧的人,他們將自己內心的每一部分需求都當作朋友來看待,這樣每一部分都不會搗亂。這樣的人不是試圖控制或壓制一些缺點,而總能從它們當中找到正面的資訊。


仔細地聆聽一下你內心的聲音,你會聽見,你心中有一個部分在大喊:你整天做令人煩躁和勞累的工作,你太需要休息和娛樂了。現在,你要感謝這個“次人格”對你的關心和幫助,告訴它你一定會去。但此時此地,你必須先把手頭的工作完成。這個時候,你會發現,那些曾經讓你分心的想法不再糾纏你了,它相信了你的承諾。

edemon@linux:~$ grep -n "分裂" tt     #tt中包含"分裂"的所有行
1:“在這個世界上,分裂是最大的痛苦,堤壩的分裂會導致洪災,地表的分裂會導致地震,山巒的分裂會帶來山崩,愛情的分裂會帶來離婚,同樣你和自我的分裂會帶來一生的痛苦和遺憾。人生最大的痛苦莫過於知道該怎麼做卻沒有去做,你會自責,你會對自己不滿意,你會覺得自己是渺小的、不講信譽不可信的。總而言之,就是你開始不信任自己,自信心降低了。”
edemon@linux:~$ grep -v "分裂" tt   #tt中不包含"分裂"的所有行


真正能自控的人是內心和諧的人,他們將自己內心的每一部分需求都當作朋友來看待,這樣每一部分都不會搗亂。這樣的人不是試圖控制或壓制一些缺點,而總能從它們當中找到正面的資訊。


仔細地聆聽一下你內心的聲音,你會聽見,你心中有一個部分在大喊:你整天做令人煩躁和勞累的工作,你太需要休息和娛樂了。現在,你要感謝這個“次人格”對你的關心和幫助,告訴它你一定會去。但此時此地,你必須先把手頭的工作完成。這個時候,你會發現,那些曾經讓你分心的想法不再糾纏你了,它相信了你的承諾。

edemon@linux:~$ grep -c "分裂" tt   #輸出行數
1

edemon@linux:~$ grep -l "分裂" *
grep: c: Is a directory
grep: d: Is a directory
grep: Desktop: Is a directory
grep: Documents: Is a directory
grep: Downloads: Is a directory
grep: e: Is a directory
grep: f: Is a directory
grep: Music: Is a directory
grep: Pictures: Is a directory
grep: pra.link: Is a directory
grep: Public: Is a directory
grep: sda: Is a directory
grep: Templates: Is a directory
tt
grep: Videos: Is a directory

edemon@linux:~$ grep -s "分裂" *   #和前者比較少了很多亂七八糟的出錯資訊
tt:“在這個世界上,分裂是最大的痛苦,堤壩的分裂會導致洪災,地表的分裂會導致地震,山巒的分裂會帶來山崩,愛情的分裂會帶來離婚,同樣你和自我的分裂會帶來一生的痛苦和遺憾。人生最大的痛苦莫過於知道該怎麼做卻沒有去做,你會自責,你會對自己不滿意,你會覺得自己是渺小的、不講信譽不可信的。總而言之,就是你開始不信任自己,自信心降低了。
edemon@linux:~$ grep -r doc *   #遞迴搜尋當前目錄下含關鍵詞grep的文字內容

grep 使用 -w 後相應的元字元變成普通字元,使用引數x匹配整行
edemon@linux:~$ cat tt
#!/bin/bash
echo "the time is "
date
echo here is :
who
echo
edemon@linux:~$ grep -w echo tt
echo "the time is "
echo here is :
echo
edemon@linux:~$ grep -x echo tt
echo

echo $? 用於輸出上一條命令的退出狀態(返回碼)0表示成功執行,1表示未得到結果,2表示產生語法錯誤
edemon@linux:~$ echo $?
0
edemon@linux:~$ grep -x echo ttt
grep: ttt: No such file or directory
edemon@linux:~$ echo $?
2

edemon@linux:~$ cat tt
ab
ab
cv
ab
edemon@linux:~$ grep -b -w ab tt   #列印匹配行距離首部的偏移量
0:ab
3:ab
9:ab    #解釋,每一個串計上'\0'
edemon@linux:~$ cat tt
ab ab cv ab
edemon@linux:~$ grep -b -o -w ab tt   #匹配詞的偏移量
0:ab
3:ab
9:ab
edemon@linux:~$ grep -b -w ab tt
0:ab ab cv ab

查詢tt檔案中的空白行和非空白行
edemon@linux:~$ grep ^$ tt
edemon@linux:~$ grep ^[^$] tt
精確匹配:
edemon@linux:~$ grep "\<ab\>" tt
ab
edemon@linux:~$ grep -w ab tt
ab

grep 命令族:
grep 標準,支援基本正則表示式
egrep (grep -E) 拓展,支援拓展正則表示式
fgrep  (grep -F)  快速,不支援正則表示式

不區分大小寫的查詢:
edemon@linux:~$ grep .*[aA].* tt   #查詢含a或者A的文字
34.eA
asa

行尾判斷:
edemon@linux:~$ grep -E [^A-Za-z]$ tt
:
213
edemon@linux:~$ grep -E :$ tt
:

相關推薦

linux shellgrep 常用選項

color選項增加顏色渲染 使用拓展正則表示式 如果要使用正則表示式,需要新增-E選項——這意味著使用擴充套件(extended)正則表示式。或者也可以使用預設允許正則表示式的grep命令——egrep。例如: $ grep -E "[a-z

0082-Linux-Shell-標準輸入標準輸出

標準輸入 標準輸出 標準錯誤 command > filename 把把標準輸出重定向到一個新檔案中 command >> filename 把把標準輸出重定向到一個檔案中(追加)

0083-Linux-Shell-date命令格式

獲得當天的日期 date +%Y-%m-%d 輸出: 2011-07-28 date1=$(date --date='1 days ago +%Y%m%d') #前一天的日期 date1=$(date --date='2 days ago +%Y%m%d')

網路配置基礎Linux-shell

網路配置基礎: A~C類IP地址部分私有不使用在Inter上: A類:10.0.0.0-10.255.255.255 B類:172.16.0.0-172.31.255.255 C類:192.168.

軟體安裝與維護Linux-shell

軟體安裝與維護: 常用Linux軟體安裝方式: 1.以原始碼方式安裝 2.以軟體包方式安裝:【軟體包分2種】 1).rpm軟體包。-->在RedHat紅帽企業的RedHat,Fedora,CentOS等發行版

DNS伺服器Linux-shell

DNS伺服器 DNS伺服器是常用網路服務之一,當用戶利用計算機訪問網際網路之前,一個重要步驟是需要指定所要使用的DNS伺服器,它把使用者所請求的網際網路地址中的主機名解析成為IP地址。 # http://www.example.com/in

網路安全管理Linux-shell

網路安全管理: 作業系統安全主要基於:控制和隔離。 訪問控制涉及3方面:主體、客體、控制機制。 SELinux:是Linux中的一個核心安全模組,它提供了另外一種被稱為強制訪問控制(MAC)的安全機制,目的是為了消除因單一使用自

WWW伺服器Linux-shell

WWW伺服器: Linux發行版:RHEL6 WWW:即全球資訊網,也直接被稱為Web,實際上是指一張由各種網頁所構成的,網頁間互相通過連結連線在一起的“網”。即:www中網路的概念指的是由資訊內容所構成的網路。 網際網路:指

Samba伺服器Linux-shell

Samba伺服器: Samba伺服器是一種應用於區域網之內,為安裝有Windows、Linux等作業系統的主機之間提供檔案和印表機共享服務的自由軟體。Samba一詞來自於對術語SMB服務資訊塊的擴充套件,即Samba是SMB的另一種表述。SM

Linux起步Vim常用命令備註

退出 ZZ 儲存當前檔案並退出Vim :q! 放棄編輯 :e! 放棄所有修改並重新載入該檔案的原始內容 進入編輯 1、插入文字 i 進入insert模式 2、其他編輯命令 a 在游標後插入文字 o 當前行下另起一行 O 在當前行上另起一行 使用命令計數:追加3個感嘆號:3a

Linux系列基礎版第三章 Shell基礎知識

linux shell 3. Shell基礎知識 3.1 Shell的由來 3.1.1 Bourne Agin Shell 3.1.2 其他的shell, 有 zsh, ksh等 3.2 查看有沒有shell 3.2.1 yum list

每天一個linux命令grep

http pre 內容 技術分享 image 忽略 linux filename com 【簡介】 grep:一種強大的文本搜索工具,它能使用正則表達式搜索文本,並把匹配的行打印出來 【grep常用用法】 [root@www ~]# grep [-acinv] [--col

shell學習筆記1 linux shell 編程從初學到精通第2版

$1 註釋 文件名 man 輸出 當前 進制數 2.4 it is 已登錄用戶的個數: who | wc -l 查看系統有哪些用戶登錄 : who 新建一個文件/bin/ct11,在文件中輸入一條命令,chmod為該文件設置執行權限 # cat > /bin/ct

linux 學習shell指令碼自動化登入

每次登入都需要輸入密碼,,好麻煩滴感覺,於是想做個自動登入指令碼,豈不美哉^ . ^ 如何輸入密碼是個大問題,好在有個互動輸入的工具【expect】 首先需要安裝一下, 【Centos】 #檢視是否安裝過 yum list | grep expect #安裝

shell命令進階Linux-shell基本操作

shell 1.萬用字元: 萬用字元: *:表示任意長度的字串,如:ls ~/* #列舉家目錄下所有檔案或子目錄 ?:表示任意一個字元,如: ls

linux CC語言中常用的幾個函式的總結

1、memset函式 定義變數時一定要進行初始化,尤其是陣列和結構體這種佔用記憶體大的資料結構。在使用陣列的時候經常因為沒有初始化而產生“燙燙燙燙燙燙”這樣的野值,俗稱“亂碼”。每種型別的變數都有各自的初始化方法,memset() 函式可以說是初始化記憶體的“萬能函式”,通常為新申請的記憶體進行初始化工作。

linux CC語言中常用的幾個函數的總結

有效 getchar() 調用 指向 ++ 再次 無法 linux c 收回 1、memset函數 定義變量時一定要進行初始化,尤其是數組和結構體這種占用內存大的數據結構。在使用數組的時候經常因為沒有初始化而產生“燙燙燙燙燙燙”這樣的野值,俗稱“亂碼”。每種類型的變量都有各

linux CC語言中常用的幾個函式的總結

3、fgets 雖然用 gets() 時有空格也可以直接輸入,但是 gets() 有一個非常大的缺陷,即它不檢查預留儲存區是否能夠容納實際輸入的資料,換句話說,如果輸入的字元數目大於陣列的長度,gets 無法檢測到這個問題,就會發生記憶體越界,所以程式設計時建議使用 fgets()。fgets() 的原型為

Linux入門十四、Shell程式設計8 -- 流程控制for迴圈

十四、Shell程式設計8 -- 流程控制for迴圈 for語法1 舉例1: 輸出結果: AM PM EVE 舉例2: 批量解壓縮指令碼 for語法2 舉個例子:

Linux入門十三、Shell基礎4 -- 多命令執行與管道符

十三、Shell基礎4 -- 多命令執行與管道符 1 多命令順序執行 執行符 格式 作用 例子 ; 命令1 ; 命令2 多個命令順序執行,命令之間沒有任何邏輯聯絡 ls ; date ; cd /hello ; date &am