描述:
grep: Global search REgular expression and Print outthe line.
作用:文本搜索工具,根據用戶指定的“模式”對目標文本逐行進行匹配檢查;打印匹配到的行;
模式:由正則表達式字符及文本字符所編寫的過濾條件
語法格式:grep [OPTIONS] PATTERN [FILE…]
OPTIONS(選項):
– -color=auto: 對匹配到的文本著色顯示;
-v: 顯示不能夠被pattern 匹配到的行
-i: 忽略字符大小寫
-n:顯示匹配的行號
-c: 統計匹配的行數
-o: 僅顯示匹配到的字符串;
-q: 靜默模式,不輸出任何信息
-A #: after, 后# 行
-B #: before, 前# 行
-C # :context, 前后各# 行
-e :實現多個選項間的邏輯or 關系
-w :整行匹配整個單詞
-E :使用ERE(擴展正則表達式)
PATTERN(模式):結合正則表達式
正則表達式:
REGEXP :由一類特殊字符及文本字符所編寫的模式,其中有些字符(元字符)不表示字符字面意義,
而表示控制或通配的功能
程序支持:grep, vim, less,nginx等等
基本正則表達式:BRE
擴展正則表達式:ERE
grep -E, egrep
正則表達式引擎:采用不同算法,檢查處理正則表達式的軟件模塊
PCRE(Perl Compatible Regular Expressions)
元字符分類:字符匹配、匹配次數、位置錨定、分組
示例:
1,查找特定字符串‘the'
[root@localhost ~]# grep -n 'the' regular_express.txt 8:I can't finish the test. 12:the symbol '*' is represented as start.
2,反向查找特定字符串’the'
[root@localhost ~]# grep -vn 'the' regular_express.txt
3,查找不論大小寫的字符串'the'
[root@localhost ~]# grep -in 'the' regular_express.txt 8:I can't finish the test.
4,查找test或taste這兩個單詞的字符串
[root@localhost ~]# grep -n 't[ae]st' regular_express.txt 8:I can't finish the test. 9:Oh! The soup taste good.
5,查找含有'oo'字符串
[root@localhost ~]# grep -n 'oo' regular_express.txt 1:"Open Source" is a good mechanism to develop programs. 18:google is the best tools for search keyword. 19:goooooogle yes!
6,查找除a-z以外的,包含'oo’的字符
[root@localhost ~]# grep '[^a-z]oo' regular_express.txt Football game is not use feet only.
其中:[:alnum:]表示英文大小寫字符及數字,即0-9,A-Z,a-z
[:alpha:]表示任何英文大小寫字符,即A-Z,a-z
[:digit:]表示數字,即0-9
[:lower:]表示小寫字符,即a-z
[:upper:]表示大寫字符,A-Z
[:space:]表示任何空白字符
7,查找字符串'the'開頭的行
[root@localhost ~]# grep '^the' regular_express.txt the symbol '*' is represented as start.
8,查找非字母開頭的行
[root@localhost ~]# grep -n '^[^[:alpha:]]' regular_express.txt 1:"Open Source" is a good mechanism to develop programs. 21:# I am VBird
9,查找以.結尾的行
[root@localhost ~]# grep -n '\.$' regular_express.txt 1:"Open Source" is a good mechanism to develop programs. 2:apple is my favorite food.
10,查找空白行
[root@localhost ~]# grep -n '^$' regular_express.txt 22:
11,查找開頭是g而結尾是d,中間包含兩個字符串的行
[root@localhost ~]# grep -n 'g..d' regular_express.txt 1:"Open Source" is a good mechanism to develop programs. 9:Oh! The soup taste good. 16:The world <Happy> is the same with "glad".
12,查找字符串開頭與結都是g,但兩個g之間僅能存在至少一個o的行,即gog,goog,goooog
[root@localhost ~]# grep -n 'goo*g' regular_express.txt 18:google is the best tools for search keyword. 19:goooooogle yes!
13,查找g開頭與g結尾的字符串,當中的字符可有可無,即g,gg,ggg,gggg
[root@localhost ~]# grep -n 'g*g' regular_express.txt 14:The gd software is a library for drafting programs. 19:goooooogle yes!
14,查找符合'g…g'的需求的行
[root@localhost ~]# grep -n 'g.*g' regular_express.txt 14:The gd software is a library for drafting programs. 20:go! go! Let's go.
15,查找兩個o的字符串
[root@localhost ~]# grep -n 'o\{2\}' regular_express.txt 2:apple is my favorite food 19:goooooogle yes!
16,查找g后面接2到5個o,然后再接一個g的字符串
[root@localhost ~]# grep -n 'go\{2,5\}g' regular_express.txt 18:google is the best tools for search keyword.
17,查找2個o以上的字符串
[root@localhost ~]# grep -n 'go\{2,\}g' regular_express.txt 18:google is the best tools for search keyword. 19:goooooogle yes!
18,錨定單詞:列出含有root的行的信息
[root@localhost ~]# grep '\<root\>' /etc/passwd root:x:0:0:root:/root:/bin/bash operator:x:11:0:operator:/root:/sbin/nologin
egrep及擴展的正則表達式
語法格式:egrep [OPTIONS] [PATTERN] [FILE…]
egrep =grep -E
擴展正則表達式的元字符:
字符匹配:
. 任意單個字符
[ ] 指定范圍內的字符
[^] 不在指定范圍內的字符
次數匹配:
* 匹配前面字符任意次
? 匹配0次,1次,可有可無
+ 匹配至少一次
{m} 匹配m次
{m,n} 至少m次,至多n次
位置錨定:
^ 行首
$ 行尾
\<,\b 詞首
\>,\b 詞尾
分組:(), 向后引用:\1,\2,…
[root@localhost ~]# echo "11.11.12.12" |egrep "([0-9]{1,3})\.\1\.([0-9]{1,3})\.\2" 11.11.12.12
或者:a|b
示例:
1,顯示用戶root 或mage 或wang 的信息
[root@localhost ~]# grep -E '^(root\>|mage\>|wang\>)' /etc/passwd root:x:0:0:root:/root:/bin/bash mage:x:511:518::/home/mage:/bin/bash wang:x:512:519::/home/wang:/bin/bash
cat命令:查看文件內容
語法格式:cat [OPTION]… [FILE]…
-E: 顯示行結束符$
-n: 對顯示出的每一行進行 編號
-A: 顯示所有控制符
-b: 非空行編號
-s: 壓縮連續的空行成一行
[root@localhost ~]# cat -nE test 1He loves his lover. He likes his lover.$ 2She likes her liker. She lovers her liker.$
more命令:分頁查看文件內容
語法格式:more [OPTIONS…] FILE…
-d: 顯示翻頁及退出提示
[root@localhost ~]# more /etc/rc.d/init.d/functions
less命令:一頁一頁地查看文件或STDIN 輸出
/文本 搜索文本
n/N 跳到下一個或上一個匹配的結果
less 命令是man 命令使用的分頁器
[root@localhost ~]# cat /etc/passwd |less
head命令:顯示文本前行的內容
語法格式:head [OPTION]… [FILE]…
-c #: 指定獲取前# 字節
-n #: 指定獲取前#行 行
-#: 指定行數
[root@localhost ~]# head -3 /etc/passwd root:x:0:0:root:/root:/bin/bash bin:x:1:1:bin:/bin:/sbin/nologin daemon:x:2:2:daemon:/sbin:/sbin/nologin
tail命令:顯示后行的內容
語法格式:tail [OPTION]… [FILE]…
-c #: 指定獲取后# 字節
-n #: 指定獲取后#行 行
-#: 指定行數
-f: 跟蹤顯示文件新追加的內容,常用日志監控
[root@localhost ~]# tail -f test 在另外一個終端以root用戶登錄,執行echo “123” >>test,即可顯示結果 He loves his lover. He likes his lover. 123
cut命令:按列抽取文本內容
語法格式:cut [OPTION]… [FILE]…
-d DELIMITER: 指明分隔符,默認tab
-f FILEDS:
#: 第# 個字段
#,#[,#] :離散的多個字段,例如1,3,6
#-# :連續的多個字段, 例如1-6
混合使用:1-3,7
-c 按字符切割
–output-delimiter=STRING 指定輸出分隔符
顯示文件或STDIN 數據的指定列
[root@localhost ~]# cut -d: -f1,3,7 /etc/passwd 常用選項,取出用戶的名字,UID和默認shell root:0:/bin/bash bin:1:/sbin/nologin
paste命令: 合并兩個文件同行號的列到一行
語法格式:paste [OPTION]… [FILE]…
-d 分隔符: 指定分隔符,默認用TAB
-s : 所有行合成一行顯示
wc命令:統計文本數據
[root@localhost ~]# wc /etc/fstab 12:行數 60:字數 595:字符數 /etc/fstab
-l 統計行數
-w 統計單詞數
-c 統計字節數
-m 統計字符數
sort命令:文本排序(把整理過的文本顯示在STDOUT),不改變原始文件
語法格式:sort [options] file(s)
-r 執行反方向(由上至下)整理
-n 執行按數字大小整理
-f 選項忽略(fold )字符串中的字符大小寫
-u 選項(獨特,unique )刪除輸出中的重復行
-t c 選項使用c 做為字段界定符
-k X 選項按照使用c 字符分隔的X 列來整理能夠使用多次
示例:將/etc/rc.d/init.d/function文件按單詞進行排序
[root@localhost ~]# cat /etc/rc.d/init.d/functions |tr -sc '[:alpha:]' '\n' |sort -n
uniq命令:從輸入中刪除重復的前后相接的行 (常和sort 命令一起配合使用)
語法格式:uniq [OPTION]… [FILE]…
-c: 統計每行重復出現的次數
-d: 顯示重復過的行
-u: 僅顯示不曾重復的行連續且完全相同方為重復
示例:將/etc/rc.d/init.d/function文件統計出現次數最多的單詞
[root@localhost ~]# cat /etc/rc.d/init.d/functions |tr -sc '[:alpha:]' '\n' |sort |uniq -c |sort -n |tail -1 67 pid (這是CentOS 7)
[root@localhost ~]# cat /etc/rc.d/init.d/functions |tr -sc '[:alpha:]' '\n' |sort |uniq -c |sort -n |tail -1 83 if (這是CentOS 6)
diff命令:比較兩個文件的不同
語法格式:diff [OPTION]… FILES
diff命令的輸出被保存在一種叫做“補丁”的文件中
使用-u選項來輸出“統一的(unified)”diff格式文件,最適用于補丁文件
patch命令:向文件打補丁
[root@localhost ~]# diff fstab.old fstab.new 1,2d0 表示第一行和第二行被刪除了, < 表示第一行的內容 < # 表示第二行的內容 12a11,12 表示在原來的第12行后增加了兩行,命令為11,12 > > new line
要結合-b選項來自動備份改變了的文件
[root@localhost ~]# echo old >old [root@localhost ~]# echo new >new [root@localhost ~]# diff -u old new >patch
[root@localhost ~]# rm -f old [root@localhost ~]# patch -b -R new patch patching file new [root@localhost ~]# cat new old [root@localhost ~]# mv new old [root@localhost ~]# cat old old
原創文章,作者:pingsky,如若轉載,請注明出處:http://www.www58058.com/30112