標籤:shell指令碼編程之Regex
多命令執行方法:
指令碼組成;
1.shengbang
2.#
3.空白行——沒有任何內容的行、只包含空白字元或定位字元(TAB)
4.邏輯判斷
shell指令碼編程:
1.加執行許可權,通過路徑來呼叫指令碼;
2.利用解譯器直接執行;
本文處理工具:
vim、vi、nano
文本處理三劍客:
grep系:
grep、egrep、fgrep,文本搜尋工具,基礎“pattern”對於給定的文本進行模糊搜尋,grep系預設工作於貪婪模式下;
sed:stream editor,流資料器,行編輯器,文本編輯工具;
awk:gawk,——gun awk,文字格式設定化工具,文本報告產生器,文本處理的程式設計語言;
cut、sort
grep系:
grep
egrep
fgrep
grep:global search regular expression and print out the line。
利用Regex進行全域搜尋並將匹配的行顯示出來;
grep [OPTIONS] PATTERN [FILE...]
PATTERN:過濾條件,是由Regex元字元以及沒有特殊含義的文本字元組成;
Regex的元字元:
會被Regex引擎解釋為特殊含義;
pcre(最完整的Regex引擎)——perl語言的Regex引擎;
基本的Regex:bre
擴充的Regex:ere
grep:預設僅支援基本Regex;
egrep:預設僅支援擴充Regex;
fgrep:預設不開啟Regex引擎;
文本字元:
只具備字元便面含義的那些字元;
常用選項:
-i, --ignore-case:忽略文本字元的大小寫;
-v, --invert-match:反相匹配;最終顯示的結果是pattern不能成功匹配的行;
-c, --count:計數,統計匹配pattern的所有的行數;
-o, --only-matching:關閉貪婪模式,僅顯示pattern能夠匹配的內容;
-q, --quiet, --silent:安靜模式,不輸出任何匹配結果;
--color[=WHEN], --colour[=WHEN]:將匹配pattern的內容以特殊顏色高亮顯示;
--color=auto
-E, --extended-regexp:擴充的Regex,grep -E相當於egrep
-F, --fixed-strings, --fixed-regexp:grep -F 相當於fgrep
-G, --basic-regexp:基本的Regex,egrep -G 相當於grep
-P, --perl-regexp:使用pcre(perl common regular expression)引擎;
-A NUM, --after-context=NUM:在顯示匹配pattern的行的同時顯示其後面的num行;
-B NUM, --before-context=NUM:在顯示匹配pattern的行的同時顯示其前面的num行;
-C NUM, -NUM, --context=NUM:在顯示匹配pattern的行的同時顯示其前後各num行;
pattern:
Regex元字元:
基本的Regex元字元:
globbing--------簡化版的Regex:[] ? *
字元匹配:
. :匹配任意單個字元;
[] :匹配指定範圍內的任意單個字元;
[^] :匹配指定範圍意外的任意單個字元;
下列所有的字元集都可以放置於[]之中用於匹配單個字元;
[:lower:]:表示所有小寫字字母;
[[:lower:]]:通配任意單個小寫字母;
[:upper:]:表示所有的大寫字母;
[[:upper:]]:通配任意單個大寫字母;
[:alpha:]:表示所有字母字元;
[:digit:]:表示所有的十進位數字; 10
[:alnum:]:表示所有的大小寫字母以及十進位數字;
[:space:]:表示空白字元;
[:punct:]:表示所有的標點符號;
[:blank:]:表示空白字元;
[:xdigit:]:所有的十六進位數字;
a-z:所有的小寫字母;
A-Z:所有的大寫字母;
0-9:所有的十進位數字;
次數匹配:該類字元之前的那個字元可以出現的字數;
*:其前面的字元可以出現任意次(0次,1次或多次);
\?:其前面的字元可有可無(0次或1次);
\+:其前面的字元至少出現一次(1次或多次);
\{m\}:其前面的字元必須出現m次;
\{m,n\}:其前面的字元至少出現m次,至多出現n次;(m<n)
\{,n\}:其前面的字元至少出現0次,至多出現n次;
\{m,\}:其前面的字元至少出現m次,多多益善;
在Regex中,表示任意長度任一字元的方式:.*
位置錨定字元:
行錨定:
行首錨定:^
行尾錨定:$
字錨定:
字首錨定:\<或\b
字尾錨定:\>或\b
\b:舊版本中的錨定方法,建議不使用;
對於Regex引擎來說,字是由非特殊字元組成的練習字串;
分組與引用字元:
\(pattern\):將此pattern所匹配到的所有字元當作一個不可分割的整體來處理;
在Regex引擎值周,有一系列的內建變數,這些變數會儲存所有分組內的字元資訊,用於後向引用;這些變數依次是:\1,\2,\3,...
pattern1\(pattern2\)pattern3\(pattern4\(pattern5\)\)
\1:pattern2
\2:pattern4
\3:pattern5
\1:第一組小括弧中的pattern匹配到的字元;
\2:第二組小括弧中的pattern匹配到的字元;
...
請找出在/etc/passwd中使用者的UID和GID相同的使用者賬戶;
grep ‘\(\<[[:digit:]]\+\>\).*\1‘ /etc/passwd:設定和查看使用者的密碼資訊;
或:
\|
注意:\|將其左右兩邊的字串當作整體對待;
A\|american:A或american
請找出ifconfig命令的執行結果中數值在100-255之間的整數;
第一位: 1 2
第二位:0-9 0-4 5
第三位:0-9 0-9 0-5
ifconfig | grep ‘\<1[0-9][0-9]\|2[0-4][0-9]\|25[0-5]\>‘
請找出ifconfig命令執行結果中數值在0-255之間的整數
grep [OPTIONS] [-e PATTERN | -f FILE] [FILE...]
預設情況下,grep命令後面只允許有一個pattern;
如果想要在一次grep搜尋過程中寫多個pattern,則需要使用-e選項:每一個-e選擇只能使用一個pattern作為參數;
將所需要的pattern寫入到一個個檔案中,保證每行只有一個pattern:我們就可以使用-f file方式來實現多pattern匹配;
egrep:
egrep [OPTIONS] PATTERN [FILE...]
擴充的Regex元字元:
字元匹配:
.
[]
[^]
次數匹配:
*
?
+
{m}
{m,n}
{m,}
{0,n}
位置鉚釘:
^
$
\<,\b
\>,\b
分組和引用:
()
\1,\2,\3,...
或:
|
fgrep:pattern中所有的字元都被當作文本字元來處理;
其他的文本處理命令;
wc:統計一個檔案中的行數、字數及位元組數;
wc [OPTION]... [FILE]...
wc [OPTION]... --files0-from=F
-c:只顯示位元組數;
-l:只顯示行數;
-w:只顯示字數;
cut:remove sections from each line of files
能夠被cut命令修剪的檔案,一般都是具有一定結構或格式的文字文件;/etc/passwd
cut OPTION... [FILE]...
-d, --delimiter=DELIM:指定在實施修剪操作時所依賴的分隔字元,預設是空白字元;
-f, --fields=LIST:根據定義的分隔字元來指定欄位的編號;
地址定界使用方法:
#:選擇被指定的單個欄位;
#,#:離散的多個被指定的單個欄位;
#-#:連續的多個被指定的欄位;
--output-delimiter=STRING:指定輸出符號;
awk:pattern scanning and processing language
awk -F "delimiter"‘[/pattern/]{print $1,$2,...$NF}‘ file...
-F "delimiter":指定欄位分隔符號,預設為空白字元;
$1,$2,...$NF:根據欄位分隔符號切割出來的文本片段都存放在相應的內部變數中;
sort:sort lines of text files,將文字檔按行繼續排序,預設定序是按照ASCII表中的字元順序進行,
這個排序標準可以修改;
sort [OPTION]... [FILE]...
sort [OPTION]... --files0-from=F
-r, --reverse:逆序排序
-R, --random-sort:隨機排序,這種隨機演算法是非常簡陋的,不適用於複雜環境;
-u, --unique:重複出現的行,只保留一行;(連續且完全相同的行叫重複)祛重;
-n, --numeric-sort:以數位數值大小進行排序;
-t, --field-separator=SEP:指定欄位分隔符號;
-k, --key=KEYDEF:指明根據哪個關鍵字段進行排序,一般和-t同時使用;
uniq:report or omit repeated lines
uniq [OPTION]... [INPUT [OUTPUT]]
-d, --repeated:只顯示重複出現的行,而且每一組重複行只顯示一行;
-u, --unique:只顯示不重複的行;
-c, --count:在每行以首碼的方式顯示重複行的重複次數;
diff:compare files line by line
diff [OPTION]... FILES
同一檔案的不同修改版本:打補丁;
patch:apply changes to files
patch [-blNR][ -c| -e| -n][-d dir][-D define][-i patchfile]
[-o outfile][-p num][-r rejectfile][file]
#7 shell指令碼編程之Regex