grep
- Linux上文本出來三劍客
- grep:文本過濾(模式:pattern)工具;
- grep ,egrep ,fgrep
- sed:stream,editor,文本編輯工具;
- awk:Linux上的實(shí)現(xiàn)gawk ,文本報(bào)告生成器;
-
grep:
Global search REgular expression and Print out the line
- 作用:文本搜索工具,根據(jù)用戶指定的“模式”對(duì)目標(biāo)文本逐行進(jìn)行匹配檢查;打印匹配搭配的行;
- 模式:由正則表達(dá)式字符及文本字符所編寫的過濾條件;
- 正則表達(dá)式(REGEXP
):由一類特殊字符及文本字符所編寫的模式,其中有些字符不表達(dá)字符字面意義,而表示控制或通配的功能;
- 正則表達(dá)式分兩類
- 基本正則表達(dá)式;BRE
- 擴(kuò)展正則表達(dá)式:ERE
- 這兩類有些元字符式相同的有些是不相同的
- grep一般的時(shí)候只支持基本正則表達(dá)式的、
- 所以我們要用egrep或grep -E 他們才能支持?jǐn)U展的正則表達(dá)式
- 而fgrep 不支持正則表達(dá)式
- 正則表達(dá)式引擎:
如grep ,sed,awk,他們都支持正則表達(dá)式
但是他們所匹配時(shí)候的算法也就式引擎各不相同
或者是有細(xì)微差別
-
grep使用格式
- grep [OPTIONS] PATTERN [FILE...]
-
選項(xiàng):
- -- color=auto:對(duì)匹配到的文本著色顯示;
- -v 顯示不能夠被pattern匹配到的行;
- -i 忽略字符大小寫
- -o 僅顯示匹配到的字符串
- -q 靜默模式,不輸出任何信息:(可以用echo $? 來查看)
- -A #:after,后#行
- -B #:before,前#行
- -C #:context ,前后各#行
- -E:使用(ERE)擴(kuò)展正則表達(dá)式
基本正則表達(dá)式
字符匹配
.
:任意單個(gè)字符[ ]
:范圍內(nèi)的任意單個(gè)字符[^ ]
: 范圍外的單個(gè)字符次數(shù)匹配
*
:任意長度的任意字符\?
:匹配其前面的字符0或1次:即前面的可有可無\+
: 匹配其前面的字符至少1次\{m\}
: 匹配前面的字符m次\{m.n\}
:匹配前面的字符至少m次,至多n次\{0,n\}
: 匹配前面的字符至多n次:可以沒有\{m,\}
: 匹配前面的字符至少m次-
位置錨定
$
:錨定行尾:模式的最右側(cè)^
:錨定行首:用于模式的最左側(cè)^PATTERN$
: 用于模式匹配整行:^$
空行:\<,\b
:詞首錨定:用于單詞模式的左側(cè):-
\>,\b
:詞尾錨定:用于單詞的右側(cè)
-\<PATTERN\>
: 匹配正則單詞- 分組
\(\) :\(\)
將一個(gè)或多個(gè)字符捆綁在一起,當(dāng)作一個(gè)整體進(jìn)行處理,如:(root)+后向引用 \1,\2,\3......
后向引用:引用前面的分組括號(hào)中的模式所匹配字符,(而非模式本身)
NOte:分組括號(hào)中的模式匹配到的內(nèi)容會(huì)被正則表達(dá)式引擎記錄于內(nèi)部的變量中,這些變量的命令方式為:\1,\2,\3.......
\1:從左側(cè)起,第一個(gè)左括號(hào)以及與之匹配右括號(hào)之間的模式所匹配到的字符
如:(ab+(xy)*);
\1:ab+(xy)*
\2:xy
egrep及擴(kuò)展的正則表達(dá)式
grep = grep -E
- grep [OPTIONS] PATTERN [FILE...]\
- 擴(kuò)展正則表達(dá)式的元字符:
- 字符匹配:
-
.
:匹配單個(gè)字符 -
[ ]
:范圍之外 -
[^]
:范圍之內(nèi) - 次數(shù)匹配:
- *:
- ?:0或多次:
- {m}:匹配m次
- {m/n}:至少m,至多n次
- 錨定:
- ^ :錨定行首
- $:錨定行尾
- <,\b:詞首錨定
- >,\b:詞尾錨定
- 分組:
( )
后向引用:\1,\2,.......
或者:
a|b
c|cat: C或cat
練習(xí):
1,顯示當(dāng)前系統(tǒng)root,centos或user1用戶的默認(rèn)shell和UID:
答案:grep -E "^(root|centos|user1)>" /etc/passwd|cut-d: -f1,3,7
2,找出/etc/rc.d/init.d/functions文件(centos6)中某單詞后面跟一個(gè)小括號(hào)的行
答案“grep -E -o "[_[:alpha:]]+() /etc/rc.d/init.d/functiosns"
3,使用echo 輸出一絕對(duì)路徑,使用egrep取出其基名:
答案:echo "/mnt/sdc" | grep -E -o "[^/]+/?$|cut-d”/" -f1
4,找出ifconfig命令結(jié)果中1-255之間的數(shù)值:
5,找出ifconfig命令結(jié)果中的ip地址
bash的基礎(chǔ)特性
變量類型:
數(shù)據(jù)存儲(chǔ)格式,存儲(chǔ)空間大小,參與運(yùn)算種類:
字符型、
數(shù)值型
他們分為整型和浮點(diǎn)型
強(qiáng)類型:定義變量時(shí)必須指定類型,參與運(yùn)算必須符合類型要求,調(diào)用未聲明的變量會(huì)產(chǎn)生錯(cuò)誤
弱類型 :無須指定類型,默認(rèn)均為字符型:參與運(yùn)算會(huì)自動(dòng)進(jìn)行隱式類型轉(zhuǎn)換,變量無效事先定義可直接調(diào)用
bash就式弱類型的編程語言
bash中的變量種類:
根據(jù)變量的生效范圍等標(biāo)準(zhǔn):
本地變量:生效范圍為當(dāng)前shell進(jìn)程,對(duì)當(dāng)前shell之外的其他shell進(jìn)程,包括當(dāng)前shell的子shell進(jìn)程均無效
環(huán)境變量:生效范圍為當(dāng)前shell進(jìn)程及子shell
局部變量:生效范圍為當(dāng)前shell進(jìn)程中某代碼片段(通常指函數(shù))
位置變量:
$1
,$2
,........來表示,用于讓腳本在腳本代碼中調(diào)用通過命令行傳遞給他的參數(shù)特殊變量
$?
,$0``$*
,$#
,#@
pstree進(jìn)程樹
本地變量:
- 變量賦值:name=`value`
- 可以使用引用:
- value:
(1)可以式直接字符串:name="username"
(2)變量引用:name="$username"
(3)命令引用:name=COMMAND`,name=$(COMMAND)
- 變量引用:${name},或-$name
- " ":弱引用,其中的變量引用會(huì)被替換為變量值
- ·· :強(qiáng)引用,其中的變量引用不會(huì)被替換為變量值,而保持原字符串:
- 顯示已定義的所有變量
set
命令 - 銷毀變量
unset name
命令
環(huán)境變量
- 變量聲明,賦值:
- export name=VALUE
- declare -x name=VALUE
- 變量引用:$name,${name}
- 顯示所有環(huán)境變量:
- export
- env
- printenv
- 銷毀:
- unset name
bash由許多內(nèi)建的環(huán)境變量:PATH,SHELL,UID,HISTSIZE,HOME,PWD,OLD,PS1,HISTFILE
變量命名法則:
1,不能使用程序中的關(guān)鍵字或保留字:if ,for 等等
2,只能使用數(shù)字,字面及下劃線,且不能以數(shù)字開頭;
3,盡量做到見名知義,
- 只讀變量:
- readonly name
- declare -r name
位置變量
- 位置變量主要在腳本代碼中調(diào)用通過命令行傳遞給腳本的參數(shù)
-
$1
,$2
......對(duì)應(yīng)調(diào)用第1.第2等參數(shù):$0命令本身:shift[n] -
$*
:傳遞給腳本的所有參數(shù)當(dāng)做一個(gè)字符串 -
$@
:傳遞給腳本的所有參數(shù)每一個(gè)參數(shù)當(dāng)做一個(gè)獨(dú)立的字符串 -
$#
:傳遞給腳本的參數(shù)的個(gè)數(shù):
元字符 | 定義 |
---|---|
^ | 行首 |
$ | 行尾 |
. | 任意單一字符 |
[ ] | [ ]范圍內(nèi)的任意單一字符 |
[^ ] | 除[ ^] 內(nèi)的任意單一字符 |
* | *前面字符重復(fù)不確定次數(shù) |
+ | +前面字符重復(fù)一次以上不確定次數(shù) |
? | ?前面字符重復(fù)0或1次 |
\ | 轉(zhuǎn)義符 |
.* | 任意長度字符 |
{ n} | 前面字符重復(fù)n次 |
{n,} | 前面字符重復(fù)n次以上 |
元字符 | 定義 |
---|---|
[:alnum:] | 字母和數(shù)字 |
[:alpha:] | 代表任何英文大小寫字符,亦即 A-Z, a-z |
[:lower:] | 小寫字母 |
[:upper:] | 大寫字母 |
[:blank:] | 水平空白字符(空格和制表符) |
[:space:] | 所有水平和垂直的空白字符(比[:blank:]包含的范圍廣) |
[:cntrl:] | 不可打印的控制字符(退格、刪除、警鈴...) |
[:digit:] | 十進(jìn)制數(shù)字 |
[:graph:] | 可打印的非空白字符 |
[:print:] | 可打印字符 |
[:punct:] | 標(biāo)點(diǎn)符號(hào) |
[:xdigit:] | 十六進(jìn)制數(shù)字 |