linux之shell腳本(1)
一、 正規表達式:
正規表達式(或稱regular expression,簡稱re)就是由普通字元(例如字元 a 到 z)以及特殊字元(稱為元字元)組成的文字模式。
該模式描述在查找文字主體時待比對的一個或多個字元串。
正規表達式作為一個模闆,将某個字元模式與所搜尋的字元串進行比對。簡單的說,正則表示式就是處理字元串的方法,它是以行為機關來進行字元串的處理行為, 正則表示式通過一些特殊符号的輔助,可以讓使用者輕易的達到搜尋/删除/取代某特定字元串的處理程式。vim、grep、find、awk、sed等指令都支援正規表達式。
1.常用正規表達式:
1) . 代表任意單個字元;
例如:檢索test.txt文本中比對s字元的。
2) ^ 代表行的開始;
3) $ 代表行的結束;
例如;檢索test.txt文本中以.結束的。(\.表示把特殊字元.轉為普通字元)
4)[...]表示比對括号中的字元之一
例如:檢索test.txt文本中比對小寫字母a到z之間的。
注意:
[abc]表示比對單個字元a或b或c
[123]表示比對單個字元1或2或3
[a-z]表示比對大寫字母a-z之間一個
[^a]表示取反,比對除去小寫字母a的。
5)* 表示前導字元出現0次或任意多次;
例如:檢索test.txt文本中出現0次或多次t的。
6) \? 表示前導字元出現0或1次;
例如:檢索test.txt文本中出現0或1次e的。
7)\+ 表示前導字元出現1次或多次。
例如:檢索test.txt文本中出現1或多次nn的。
8)\{n,m\} 表示前導字元出現n至m次;
n/m為整數,并且m>n;
其他形式:
\{n\}連續的n個前導字元;
\{n,\}連續的至少n個前導字元;
例如:檢索test.txt文本中出現2至4個n的。
9) \ 表示轉義其後的單個特殊字元,使其成為普通字元;
例如:檢索test.txt文本中含有.的。
10) | 表示或;
例如:檢索test.txt文本中含有a或b的。
11) [] 或 ():将部分内容合成一個機關組;
例如:檢索test.txt檔案中含有tae或the的。
二、grep指令的用法
grep (global search regular expression(re) and print out the line,全面搜尋正規表達式并把行列印出來)是一種強大的文本搜尋工具,它能使用正規表達式搜尋文本,并把比對的行列印出來.
1)-a 數字:列出符合行之外,并且列出後幾行;
例如:列出test.txt文本中tom行與後倆行。
2)-b 數字:列出符合行之外,并且列出前幾行;
例如:列出test.txt文本中tom行與前倆行。
3)-c 數字(如不加數字,預設為2):列出符合行之外,并且列出前後幾行;
例如:列出test.txt文本中tom行與前後倆行。
4)-c : --count(若再加上-v參數則顯示不符合的總行數):不顯示符合的行,隻顯示符合的總行數;
例如:列出test.txt文本中含有tom的行數;
列出test.txt文本中不含有tom的行數。
5)-i :忽略大小寫
例如:列出test.txt文本中含有tom(大小寫)的行。
6)-n :再比對的行前面列印行号
例如:列出test.txt文本中含有tom(大小寫)的行,并且列印出行号。
7)-v :反檢索,顯示不比對的行;
例如:列出test.txt文本中不含有tom的行。
8)精确比對:再抽取的字元串後加上 \>
例如:精确列出test.txt文本中含有30的行。
8)-s :不顯示不存在或不比對文本的錯誤資訊;(如檔案不存在)
例如:bb.txt檔案不存在,檢索時候提示搜尋不到的錯誤資訊,
如果不要錯誤資訊提示,則加上-s。
三、sed指令的用法
sed是一種線上編輯器,它一次處理一行内容。處理時,把目前處理的行存儲在臨時緩沖區中,稱為“模式空間”(pattern space),接着用sed指令處理緩沖區中的内容,處理完成後,把緩沖區的内容送往螢幕。接着處理下一行,這樣不斷重複,直到檔案末尾。檔案内容并沒有改變,除非你使用重定向存儲輸出。
sed的基本指令:
1)s :替換
例如:把test.txt中the替換成aa,輸出到bb.txt檔案中。
sed 替換指令:
/../../分隔符(可以用其他符合代替)
the 搜尋的字元串
aa 替換的字元串
<test.txt> 搜尋的檔案
bb.txt 輸出到的檔案
2) & :表示比對的字元串
sed 預設隻替換搜尋字元串的第一次出現 , 利用 /g 可以替換搜尋字元串所有
如果需要對同一檔案或行作多次修改,可以使用 "-e" 選項
例如:給test.txt中the替換成加一個(),輸出到cc.txt檔案中。
3) d :删除行
例如:将passwd内容顯示并列印行号,同時删除2到5行。
nl指令在linux系統中用來計算檔案中行号。nl 可以将輸出的檔案内容自動的加上行号。
4)增加行:a(在指定的行後新增)i(在指定的行前新增)
例如:将test.txt内容顯示并列印行号,同時在第二行後新增hello。
例如:将test.txt内容顯示并列印行号,同時在第二行前新增hello。
例如:如果要同時新增多行,則每行之間要用反斜杠\來進行的添加。
5)c :取代行
例如:将test.txt内容顯示并列印行号,同時取代2到5行間内容為bbbbbbb。
6)p : 列印
例如:僅列出test.txt文本中的第5到7行内容。
7)-i:sed 的-i選項可以直接修改檔案中的内容
例如:将test.tst文本中的第二行修改為kkkk
8)擴充
調用sed的方式:
在指令行鍵入指令
将sed指令插入腳本檔案,然後調用sed
将sed指令插入腳本檔案,并使sed腳本可執行。
使用sed指令行的格式:
sed [選項] sed指令 輸入檔案。
記住在指令行使用sed指令時,實際指令要加單引号。
sed也允許加雙引号。
使用sed腳本檔案格式:
sed [選項] -f sed腳本檔案 輸入檔案
要使用第一行具有sed指令解釋器的sed腳本檔案的格式:
sed腳本檔案 [選項] 輸入檔案
例如:使用sed腳本将jjjjj添加到test.txt文本中的第三行,将lllll添加到test.txt文本中的第四行。
給sed腳本權限,運作腳本