grep的語法和用法
下面的例子中我們假定在檔案phone.txt中包含以下的文字,——其格式是姓加一個逗號,然後是名,然後是一個製表符,然後是電話號碼:
Francis, John 5-3871
Wong, Fred 4-4123
Jones, Thomas 1-4122
Salazar, Richard 5-2522
grep命令 | 描述 |
grep '\t5-...1' phone.txt | 把所有電話號碼以5開頭以1結束的行打印出來,注意製表符是用\t表示的 |
grep '^S[^ ]* R' phone.txt | 列印所有姓以S打頭和名以R打頭的行 |
grep '^[JW]' phone.txt | 列印所有姓開頭是J或者W的行 |
grep ', ....\t' phone.txt | 列印所有姓是4個字元的行,注意製表符是用\t表示的 |
grep -v '^[JW]' phone.txt | 列印所有不以J或者W開頭的行 |
grep '^[M-Z]' phone.txt | 列印所有姓的開頭是M到Z之間任一字元的行 |
grep '^[M-Z].*[12]' phone.txt | 列印所有姓的開頭是M到Z之間任一字元,並且點號號碼結尾是1或者2的行 |
wc命令 //統計指定文字檔案的行數,字數,字元數
常用引數:
-c:統計輸出的位元組數
-l:統計輸出行數
-L:統計輸出最長一行的長度
-w:統計輸出單詞數
[[email protected] ~]# cat f1.txt
aaa
bbb
ccc
ddd
eee
fff
[[email protected] ~]# cat f2.txt
ddd
eee
fff
ggg
hhh
取出相同的行:
[[email protected] ~]# grep -wf f1.txt f2.txt
ddd
eee
fff
[[email protected] ~]# grep -Fxf f1.txt f2.txt
ddd
eee
fff
取出不同的行:
[[email protected] ~]# grep -Fvxf <(grep -Fxf f1.txt f2.txt ) f1.txt f2.txt
f1.txt:aaa
f1.txt:bbb
f1.txt:ccc
f2.txt:ggg
f2.txt:hhh
f2.txt:
[[email protected] ~]# grep -wvf f1.txt f2.txt
ggg
hhh
[[email protected] ~]# grep -wvf f2.txt f1.txt
aaa
bbb
ccc
補充重要知識點:
grep : g (globally) search for a re (regular expression ) and p (print ) the results.
◎語法: grep [options] PATTERN [FILE...]
grep用以在file內文中比對相對應的部分,或是當沒有指定檔案時,
由標準輸入中去比對。 在預設的情況下,grep會將符合樣式的那一行列出。
此外,還有兩個程式是grep的變化型,egrep及fgrep。
其中egrep就等同於grep -E ,fgrep等同於grep -F 。
◎引數
1. -A NUM,--after-context=NUM
除了列出符合行之外,並且列出後NUM行。
ex: $ grep -A 1 panda file
(從file中搜尋有panda樣式的行,並顯示該行的後1行)
2. -a或--text
grep原本是搜尋文字檔,若拿二進位的檔案作為搜尋的目標,
則會顯示如下的訊息: Binary file 二進位檔名 matches 然後結束。
若加上-a引數則可將二進位檔案視為文字檔案搜尋,
相當於--binary-files=text這個引數。
ex: (從二進位檔案mv中去搜尋panda樣式)
(錯誤!!!)
$ grep panda mv
Binary file mv matches
(這表示此檔案有match之處,詳見--binary-files=TYPE )
$
(正確!!!)
$ grep -a panda mv
3. -B NUM,--before-context=NUM
與 -A NUM 相對,但這此引數是顯示除符合行之外
並顯示在它之前的NUM行。
ex: (從file中搜尋有panda樣式的行,並顯示該行的前1行)
$ grep -B 1 panda file
4. -C [NUM], -NUM, --context[=NUM]
列出符合行之外並列出上下各NUM行,預設值是2。
ex: (列出file中除包含panda樣式的行外並列出其上下2行)
(若要改變預設值,直接改變NUM即可)
$ grep -C[NUM] panda file
5. -b, --byte-offset
列出樣式之前的內文總共有多少byte ..
ex: $ grep -b panda file
顯示結果類似於:
0:panda
66:pandahuang
123:panda03
6. --binary-files=TYPE
此引數TYPE預設為binary(二進位),若以普通方式搜尋,只有2種結果:
1.若有符合的地方:顯示Binary file 二進位檔名 matches
2.若沒有符合的地方:什麼都沒有顯示。
若TYPE為without-match,遇到此引數,
grep會認為此二進位檔案沒有包含任何搜尋樣式,與-I 引數相同。
若TPYE為text, grep會將此二進位檔視為text檔案,與-a 引數相同。
Warning: --binary-files=text 若輸出為終端機,可能會產生一些不必要的輸出。
7. -c, --count
不顯示符合樣式行,只顯示符合的總行數。
若再加上-v,--invert-match,引數顯示不符合的總行數。
8. -d ACTION, --directories=ACTION
若輸入的檔案是一個資料夾,使用ACTION去處理這個資料夾。
預設ACTION是read(讀取),也就是說此資料夾會被視為一般的檔案;
若ACTION是skip(略過),資料夾會被grep略過:
若ACTION是recurse(遞),grep會去讀取資料夾下所有的檔案,
此相當於-r 引數。
9. -E, --extended-regexp
採用規則表示式去解釋樣式。
10. -e PATTERN, --regexp=PATTERN
把樣式做為一個partern,通常用在避免partern用-開始。
11. -f FILE, --file=FILE
事先將要搜尋的樣式寫入到一個檔案,一行一個樣式。
然後採用檔案搜尋。
空的檔案表示沒有要搜尋的樣式,因此也就不會有任何符合。
ex: (newfile為搜尋樣式檔)
$grep -f newfile file
12. -G, --basic-regexp
將樣式視為基本的規則表示式解釋。(此為預設)
13. -H, --with-filename
在每個符合樣式行前加上符合的檔案名稱,若有路徑會顯示路徑。
ex: (在file與testfile中搜尋panda樣式)
$grep -H panda file ./testfile
file:panda
./testfile:panda
$
14. -h, --no-filename
與-H引數相類似,但在輸出時不顯示路徑。
15. --help
產生簡短的help訊息。
16. -I
grep會強制認為此二進位檔案沒有包含任何搜尋樣式,
與--binary-files=without-match引數相同。
ex: $ grep -I panda mv
17. -i, --ignore-case
忽略大小寫,包含要搜尋的樣式及被搜尋的檔案。
ex: $ grep -i panda mv
18. -L, --files-without-match
不顯示平常一般的輸出結果,反而顯示出沒有符合的檔案名稱。
19. -l, --files-with-matches
不顯示平常一般的輸出結果,只顯示符合的檔案名稱。
20. --mmap
如果可能,使用mmap系統呼叫去讀取輸入,而不是預設的read系統呼叫。
在某些狀況,--mmap 能產生較好的效能。 然而,--mmap
如果運作中檔案縮短,或I/O 錯誤發生時,
可能造成未定義的行為(包含core dump),。
21. -n, --line-number
在顯示行前,標上行號。
ex: $ grep -n panda file
顯示結果相似於下:
行號:符合行的內容
22. -q, --quiet, --silent
不顯示任何的一般輸出。請參閱-s或--no-messages
23. -r, --recursive
遞地,讀取每個資料夾下的所有檔案,此相當於 -d recsuse 引數。
24. -s, --no-messages
不顯示關於不存在或無法讀取的錯誤訊息。
小: 不像GNU grep,傳統的grep不符合POSIX.2協定,
因為缺乏-q引數,且他的-s 引數表現像GNU grep的 -q 引數。
Shell Script傾向將傳統的grep移植,避開-q及-s引數,
且將輸出限制到/dev/null。
POSIX: 定義UNIX及UNIX-like系統需要提供的功能。
25. -V, --version
顯示出grep的版本號到標準錯誤。
當您在回報有關grep的bugs時,grep版本號是必須要包含在內的。
26. -v, --invert-match
顯示除搜尋樣式行之外的全部。
27. -w, --word-regexp
將搜尋樣式視為一個字去搜尋,完全符合該"字"的行才會被列出。
28. -x, --line-regexp
將搜尋樣式視為一行去搜尋,完全符合該"行"的行才會被列出。
例項:
# ps -ef | grep in.telnetd
root 19955 181 0 13:43:53 ? 0:00 in.telnetd
# more size.txt size檔案的內容
b124230
b034325
a081016
m7187998
m7282064
a022021
a061048
m9324822
b103303
a013386
b044525
m8987131
B081016
M45678
B103303
BADc2345
# more size.txt | grep '[a-b]' 範圍 ;如[A-Z]即A,B,C一直到Z都符合要求
b124230
b034325
a081016
a022021
a061048
b103303
a013386
b044525
# more size.txt | grep '[a-b]'*
b124230
b034325
a081016
m7187998
m7282064
a022021
a061048
m9324822
b103303
a013386
b044525
m8987131
B081016
M45678
B103303
BADc2345
# more size.txt | grep '' 單個字元;如[A] 即A符合要求
b124230
b034325
b103303
b044525
# more size.txt | grep '[bB]'
b124230
b034325
b103303
b044525
B081016
B103303
BADc2345
# grep 'root' /etc/group
root::0:root
bin::2:root,bin,daemon
sys::3:root,bin,sys,adm
adm::4:root,adm,daemon
uucp::5:root,uucp
mail::6:root
tty::7:root,tty,adm
lp::8:root,lp,adm
nuucp::9:root,nuucp
daemon::12:root,daemon
# grep '^root' /etc/group 匹配正則表示式的開始行
root::0:root
# grep 'uucp' /etc/group
uucp::5:root,uucp
nuucp::9:root,nuucp
# grep '/<uucp' /etc/group
uucp::5:root,uucp
# grep 'root$' /etc/group 匹配正則表示式的結束行
root::0:root
mail::6:root
# more size.txt | grep -i 'b1..*3' -i :忽略大小寫
b124230
b103303
B103303
# more size.txt | grep -iv 'b1..*3' -v :查詢不包含匹配項的行
b034325
a081016
m7187998
m7282064
a022021
a061048
m9324822
a013386
b044525
m8987131
B081016
M45678
BADc2345
# more size.txt | grep -in 'b1..*3'
1:b124230
9:b103303
15:B103303
# grep '$' /etc/init.d/nfs.server | wc -l
128
# grep '/$' /etc/init.d/nfs.server | wc –l 忽略正則表示式中特殊字元的原有含義
15
# grep '/$' /etc/init.d/nfs.server
case "$1" in
>/tmp/sharetab.$$
[ "x$fstype" != xnfs ] && /
echo "$path/t$res/t$fstype/t$opts/t$desc" /
>>/tmp/sharetab.$$
/usr/bin/touch -r /etc/dfs/sharetab /tmp/sharetab.$$
/usr/bin/mv -f /tmp/sharetab.$$ /etc/dfs/sharetab
if [ -f /etc/dfs/dfstab ] && /usr/bin/egrep -v '^[ ]*(#|$)' /
if [ $startnfsd -eq 0 -a -f /etc/rmmount.conf ] && /
if [ $startnfsd -ne 0 ]; then
elif [ ! -n "$_INIT_RUN_LEVEL" ]; then
while [ $wtime -gt 0 ]; do
wtime=`expr $wtime - 1`
if [ $wtime -eq 0 ]; then
echo "Usage: $0 { start | stop }"
# more size.txt
the test file
their are files
The end
# grep 'the' size.txt
the test file
their are files
# grep '/<the' size.txt
the test file
their are files
# grep 'the/>' size.txt
the test file
# grep '/<the/>' size.txt
the test file
# grep '/<[Tt]he/>' size.txt
the test file
相關推薦
grep的語法和用法
$ ls -l | grep '^a'通過管道過濾ls -l輸出的內容,只顯示以a開頭的行。$ grep 'test' d*顯示所有以d開頭的檔案中包含test的行。$ grep 'test' aa bb cc顯示在aa,bb,cc檔案中匹配test的行。$ grep '[a-z]\{5\}' aa顯示所有包
C/C++語法和用法技巧(指針)
lin 調用 comment c/c++ line x11 space cti 用法 void * fun( ) ; //聲明一個返回值是任意類型的指針 的函數fun() void vfun( ) ; //聲明一個沒有返回值 的函數vfun() void (*)
FindWindow和FindWindowEx的語法和用法
1 函式原型: HWND FindWindow ( LPCSTR lpClassName, LPCSTR lpWindowName ); 2 引數表: lpClassName 指向一個以null結尾的、用來指定類名的字串或一個可以確定類名字串的原
mysql數據庫 BETWEEN 語法的用法和邊界值解析
not src 之間 ont 技術 cnblogs http 結果 spa between用法: 用於where表達式中,選取兩個值之間的數據,如: 1 SELECT id FROM user WHERE id BETWEEN value1 AND value2;
編程語言和shell編程的基礎內容以及grep、egrep命令及相應的正則表達式和用法
編程語言和shell編程的基礎內容以及grep、egrep命令及相應的正則表達式和用法bash的特性之多命令執行的邏輯關系: 1.命令替換(命令之間無明確的邏輯依賴關系) COMMAND1 $(COMMAND2) 2.管道(命令之間無明確的邏輯依賴關系) COMMAND1 | COMMAND2
Shell程式設計中if的語法和常見判斷用法
if, for, while幾乎是所有程式語言的關鍵字,在Shell程式設計中也不例外,其中if是使用頻率最高的,由於Shell程式設計中不存在物件(Object)的概念,因此在if的比較判斷中主要是對字串、數字的值進行比較判斷的: 一. if的基本語法 1. if與[之間要有空格 2. []與判斷
Xml一(基本語法和約束)、
字符 一行 語言 oca cas 書寫 xsd ati 寫法 XML:eXtensible Markup Language 可擴展標記語言 version="1.0" * 可擴展:所有的標簽都是自定義的。 * 功能:數據存儲 * 配置文件
Linux中grep搜索用法
輸出 ber linu 大小 magic add option 正則表達 查找 有測試文件test.txt一枚,內容如下 aaabbbcccAAADDDEEEabcsdfjasldjfbcdokmABC 一、基本搜索常用1、現在想把abc okm篩選出來 grep "abc
position的定義和用法
位置 stat top 沒有 出現 瀏覽器 第一個 sta class absolute 生成絕對定位的元素,相對於 static 定位以外的第一個父元素進行定位。 元素的位置通過 "left", "top", "right" 以及 "bottom" 屬性進行規定。
GET,POST,PUT,DELETE的區別 和 用法
網關 到你 服務端 utf-8 option 數學 返回 由於 ces Http定義了與服務器交互的不同方法,最基本的方法有4種,分別是GET,POST,PUT,DELETE。URL全稱是資源描述符,我們可以這樣認為:一個URL地址,它用於描述一個網絡上的資源,而HTTP中
robots.txt的語法和寫法詳解
html txt 訪問 isa 字符 包含 all 屏蔽 有道 robots.txt是一個純文本文件,是搜索引擎蜘蛛爬行網站的時候要訪問的第一個文件,當蜘蛛訪問一個站點時,它會首先檢查該站點根目錄下是否存在robots.txt,如果存在,搜索機器人就會按照該文件中的內容來確
花了兩天時間學習了 sass, less, stylus的基本語法和簡單使用, 談談感受.
列表 stylus 單點 blank 明顯 一點 css 自動編譯 數據 花了兩天時間學習了 sass, less, stylus的基本語法和簡單使用, 談談感受. 1. 變量的問題 1.1變量的表示 sass有個$var, [email protected]/
em和rem的概念和用法
繼承 瀏覽器 不支持 pan rem 一個 size nbsp 計算 em 相對長度單位 相對參照物為父元素的font-size em有繼承性 沒有設置font-size時, 瀏覽器會有一個默認的em設置 rem 相對參照物為根元素html, 相當於參照物固定不變 比
nth-child,nth-last-child,only-child,nth-of-type,nth-last-of-type,only-of-type,first-of-type,last-of-type,first-child,last-child偽類區別和用法
type nth 只有一個 not 同時 選擇器 -type span 進行 我將這坨偽類分成三組,第一組:nth-child,nth-last-child,only-child第二組:nth-of-type,nth-last-of-type,第三組:first-of-tp
Kotlin基本語法和使用
activit ext eset ans 默認 構造器 span 變量 tag Kotlin 是一個基於 JVM 的新的編程語言,由 JetBrains 開發。與Java相比,Kotlin的語法更簡潔、更具表達性,而且提供了更多的特性。 Kotlin是使
Java中枚舉的寫法和用法
一個 lang 公司 nbsp -h Language integer com bsp 在公司代碼中,用了一大堆的枚舉,看得我好懵逼。下面開始看看枚舉怎麽寫和怎麽用。一、枚舉的寫法 關於枚舉的寫法,網上好多這方面的知識。這裏直接貼一個我自己寫的
linux有關命令的幫助和用法查看
linux基礎命令 man whatis info 本文檔主要整理了當使用linux命令時遇到瓶頸時可以解決/找到所需命令的方法,寫的不全,後續補充,1:whatis 命令 ##查看命令的功能 命令 --help ##查看命令的幫助 [] ##選
shell grep的一些用法
shell#1、統計字符總行數#統計系統中不允許登錄的用戶數grep -c ‘nologin‘ /etc/passwd#2、不區分大小寫查找指定字符的所有行;grep -i ‘good‘ 9.txt#3、打印指定字符的行及行號;grep -n "good" 9.txt#4、不打印指定字符的行grep -v "
隱藏和覆蓋的區別和用法
靜態方法 類的變量 靜態 如何 區別 參數類型 子類重寫 pre 父類 講隱藏和覆蓋之前先看兩個概念:靜態類型和動態類型。 任何一個引用變量都有兩個類型:一個叫靜態類型,也就是定義該引用變量的類型;另一個叫動態類型,也就是該引用實際指向的對象類型。 比如對於兩個類A和類B,
JSP學習筆記(一):JSP語法和指令
沒有 文件的 encoding 引入 2.0 .cn name blog .get 一、語法 1、腳本程序的語法格式: 腳本程序可以包含任意量的Java語句、變量、方法或表達式,只要它們在腳本語言中是有效的。 <% 代碼片段 %> 2、中文編碼問題