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