天天看點

Linux之shell腳本(1)

linux之shell腳本(1)

一、 正規表達式:

正規表達式(或稱regular expression,簡稱re)就是由普通字元(例如字元 a 到 z)以及特殊字元(稱為元字元)組成的文字模式。

該模式描述在查找文字主體時待比對的一個或多個字元串。

正規表達式作為一個模闆,将某個字元模式與所搜尋的字元串進行比對。簡單的說,正則表示式就是處理字元串的方法,它是以行為機關來進行字元串的處理行為, 正則表示式通過一些特殊符号的輔助,可以讓使用者輕易的達到搜尋/删除/取代某特定字元串的處理程式。vim、grep、find、awk、sed等指令都支援正規表達式。

1.常用正規表達式:

1)  . 代表任意單個字元;

例如:檢索test.txt文本中比對s字元的。

Linux之shell腳本(1)

2) ^ 代表行的開始;

Linux之shell腳本(1)

3) $ 代表行的結束;

例如;檢索test.txt文本中以.結束的。(\.表示把特殊字元.轉為普通字元)

Linux之shell腳本(1)

4)[...]表示比對括号中的字元之一

例如:檢索test.txt文本中比對小寫字母a到z之間的。

Linux之shell腳本(1)

注意:

[abc]表示比對單個字元a或b或c

[123]表示比對單個字元1或2或3

[a-z]表示比對大寫字母a-z之間一個

[^a]表示取反,比對除去小寫字母a的。

5)* 表示前導字元出現0次或任意多次;

例如:檢索test.txt文本中出現0次或多次t的。

Linux之shell腳本(1)

6) \? 表示前導字元出現0或1次;

例如:檢索test.txt文本中出現0或1次e的。

Linux之shell腳本(1)

7)\+  表示前導字元出現1次或多次。

例如:檢索test.txt文本中出現1或多次nn的。

Linux之shell腳本(1)

8)\{n,m\} 表示前導字元出現n至m次;

n/m為整數,并且m>n;

其他形式:

\{n\}連續的n個前導字元;

\{n,\}連續的至少n個前導字元;

例如:檢索test.txt文本中出現2至4個n的。

Linux之shell腳本(1)

9) \ 表示轉義其後的單個特殊字元,使其成為普通字元;

例如:檢索test.txt文本中含有.的。

Linux之shell腳本(1)

10) | 表示或;

例如:檢索test.txt文本中含有a或b的。

Linux之shell腳本(1)

11) []  或 ():将部分内容合成一個機關組;

例如:檢索test.txt檔案中含有tae或the的。

Linux之shell腳本(1)

二、grep指令的用法

grep (global search regular expression(re) and print out the line,全面搜尋正規表達式并把行列印出來)是一種強大的文本搜尋工具,它能使用正規表達式搜尋文本,并把比對的行列印出來.

1)-a 數字:列出符合行之外,并且列出後幾行;

例如:列出test.txt文本中tom行與後倆行。

Linux之shell腳本(1)

2)-b 數字:列出符合行之外,并且列出前幾行;

例如:列出test.txt文本中tom行與前倆行。

Linux之shell腳本(1)

3)-c 數字(如不加數字,預設為2):列出符合行之外,并且列出前後幾行;

例如:列出test.txt文本中tom行與前後倆行。

Linux之shell腳本(1)

4)-c : --count(若再加上-v參數則顯示不符合的總行數):不顯示符合的行,隻顯示符合的總行數;

例如:列出test.txt文本中含有tom的行數;

列出test.txt文本中不含有tom的行數。

Linux之shell腳本(1)

5)-i :忽略大小寫

例如:列出test.txt文本中含有tom(大小寫)的行。

Linux之shell腳本(1)

6)-n :再比對的行前面列印行号

例如:列出test.txt文本中含有tom(大小寫)的行,并且列印出行号。

Linux之shell腳本(1)

7)-v :反檢索,顯示不比對的行;

例如:列出test.txt文本中不含有tom的行。

Linux之shell腳本(1)

8)精确比對:再抽取的字元串後加上  \>

例如:精确列出test.txt文本中含有30的行。

Linux之shell腳本(1)

8)-s :不顯示不存在或不比對文本的錯誤資訊;(如檔案不存在)

例如:bb.txt檔案不存在,檢索時候提示搜尋不到的錯誤資訊,

如果不要錯誤資訊提示,則加上-s。

Linux之shell腳本(1)

三、sed指令的用法

sed是一種線上編輯器,它一次處理一行内容。處理時,把目前處理的行存儲在臨時緩沖區中,稱為“模式空間”(pattern space),接着用sed指令處理緩沖區中的内容,處理完成後,把緩沖區的内容送往螢幕。接着處理下一行,這樣不斷重複,直到檔案末尾。檔案内容并沒有改變,除非你使用重定向存儲輸出。

sed的基本指令:

1)s :替換

例如:把test.txt中the替換成aa,輸出到bb.txt檔案中。

sed 替換指令:

/../../分隔符(可以用其他符合代替)

the 搜尋的字元串

aa  替換的字元串

<test.txt>  搜尋的檔案  

bb.txt   輸出到的檔案

Linux之shell腳本(1)

2) & :表示比對的字元串

sed 預設隻替換搜尋字元串的第一次出現 , 利用 /g 可以替換搜尋字元串所有

如果需要對同一檔案或行作多次修改,可以使用 "-e" 選項

例如:給test.txt中the替換成加一個(),輸出到cc.txt檔案中。

Linux之shell腳本(1)

3) d :删除行

例如:将passwd内容顯示并列印行号,同時删除2到5行。

nl指令在linux系統中用來計算檔案中行号。nl 可以将輸出的檔案内容自動的加上行号。

Linux之shell腳本(1)

4)增加行:a(在指定的行後新增)i(在指定的行前新增)

例如:将test.txt内容顯示并列印行号,同時在第二行後新增hello。

Linux之shell腳本(1)

例如:将test.txt内容顯示并列印行号,同時在第二行前新增hello。

Linux之shell腳本(1)

例如:如果要同時新增多行,則每行之間要用反斜杠\來進行的添加。

Linux之shell腳本(1)

5)c :取代行

例如:将test.txt内容顯示并列印行号,同時取代2到5行間内容為bbbbbbb。

Linux之shell腳本(1)

6)p : 列印

例如:僅列出test.txt文本中的第5到7行内容。

Linux之shell腳本(1)

7)-i:sed 的-i選項可以直接修改檔案中的内容

例如:将test.tst文本中的第二行修改為kkkk

Linux之shell腳本(1)

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文本中的第四行。

Linux之shell腳本(1)

給sed腳本權限,運作腳本

Linux之shell腳本(1)

繼續閱讀