Grep命令功能:按照行方式處理文本。。。
grep 一般格式爲:
grep [選項]基本正則表達式[文件]
Grep參數
-c 只輸出匹配行的計數。
-I 不區分大小寫(只適用於單字符)。
-h 查詢多文件時不顯示文件名。
-l 查詢多文件時只輸出包含匹配字符的文件名。
-n 顯示匹配行及行號。
-s 不顯示不存在或無匹配文本的錯誤信息。
-v 顯示不包含匹配文本的所有行。
Grep命令原理
GREP 是 Global Regular Expression Print 的縮寫
對於標準輸入的每一行,grep執行以下的操作:
(1) 把下一輸入行復制到模式空間中. 模式空間是隻可保存一個文本行的緩衝區.
(2) 對模式空間應用正則表達式.
(3) 如果有匹配存在,該行從模式空間中被複制到標準輸出.
grep實用程序對輸入的每行重複這三個操作步驟.
注意grep處理下列情況的方式:
1.grep是一個搜索程序,它只能搜索匹配一個正則表達式的一行的存在性.
2.grep可以對一行採取唯一的動作是把它發送到標準輸出. 如果該行不匹配正則表達式,則其不被打印.
3.行的選擇只基於正則表達式. 行編號或其他準則不能用於選擇行.
4.grep是一個過濾器. 它可用在管道的左邊或右邊.
5.grep不能用於增加,刪除或修改行.
6.grep不能用於只打印行的一部分.
7.grep不能只讀取文件的一部分.
8.grep不能基於前面的內容或下一行來選擇一行.只有一個緩衝區,它只保存當前行.
grep -c "hostnames" 1.txt
eg
hzmct@U-64:/study/linuxtest/day03$ grep -c "hostnames" 2.txt
3
grep -n "hostnames" 2.txt
eg
$ grep -n "hostnames" 2.txt
4:hostnames
6:hostnames
12:hostnames
grep -v "hostnames" 2.txt
grep -i "hostNaMEs" 2.txt
grep -n '^[^48]' 2.txt
查找以k開頭,以d結尾且中間只有3個字符
grep 'k...d' 2.txt
grep -E 'k...d|k..d' 2.txt
2.txt文件內容
48
48p
48
hello
ll48o
hello
48f
qq
hostnames
HostNAMES
hzmct@U-64:/study/linuxtest/day03$ grep -n '^48' 2.txt
1:48
2:48p
3:48
7:48f
hzmct@U-64:/study/linuxtest/day03$ grep -n '[^48]' 2.txt
2:48p
4:hello
5:ll48o
6:hello
7:48f
8:qq
9:hostnames
11:HostNAMES
hzmct@U-64:/study/linuxtest/day03$ grep -n '^[^48]' 2.txt
4:hello
5:ll48o
6:hello
8:qq
9:hostnames
11:HostNAMES