正規表示式
在文書處理的過程中,正規表示式極其有用。
它提供了一種處理文字串的一種規則,結合特殊的字元,以行為單位處理字串,很容易進行搜尋、刪除、替換等操作。
對正則支援的工具也很多,比較常用的有vim、grep、sed、awk等。
注意正則與shell萬用字元的區別,同樣的字元含義大相徑庭。
在不支援正則的命令下,也可以結合支援正則的工具共同使用。如下的指令獲取所有以a開頭的檔案:
ls | grep -n '^a.*'
基礎正規表示式符號彙總(摘自鳥哥):
sedsed是乙個管線命令,可以對資料行進行替換、刪除、新增、提取等操作。
sed命令格式如下:
sed [-nefr] [動作]
其中:-n :使用安靜(silent)模式。在一般 sed 的用法中,所有來自 stdin 的資料一般都會被列出到螢幕上。但如果加上 -n 引數後,則只有經過 sed 特殊處理的那一行(或者動作)才會被列出來。
-e :直接在命令列介面上進行 sed 的動作編輯;
-f :直接將 sed 的動作寫在乙個檔案內, -f filename 則可以執行 filename 內的 sed 動作;
-r :sed 的動作支援的是延伸型正規表示式的語法。(預設是基礎正規表示式語法)
-i :直接修改讀取的檔案內容,而不是由螢幕輸出。
動作說明: [n1[,n2]]function
n1, n2 :選擇進行動作的行數,如果我的動作是需要在 10 到 20 行之間進行的,則「 10,20[動作行為] 」
function 取值如下:
a :新增, a 的後面可以接字串,而這些字串會在新的一行出現(目前的下一行)
c :取代, c 的後面可以接字串,這些字串可以取代 n1,n2 之間的行!
d :刪除,後面通常不接任何東西;
i :插入, i 的後面可以接字串,而這些字串會在新的一行出現(目前的上一行);
p :列印,亦即將某個選擇的資料印出。通常 p 會與引數 sed -n 一起執行
s :取代,可以直接進行取代的工作哩!通常這個 s 的動作可以搭配正規表示式!例如 1,20s/old/new/g
舉例:
nl a | sed -n '5,7p' # 只顯示檔案a的5-7行,特別方便
cat a.sh | sed 's/#.*$//g' #刪除以#開頭的行
sed -i "s/old/new/g" a # 替換a中所有old為new,直接修改檔案,請謹慎操作
awk
相對於sed的行處理功能,awk主要以行中的字段為單位進行列處理。
格式:awk '條件型別1 條件型別2 ...' filename
awk的內建變數:
變數含義
nf每行的字段數
nr目前awk處理的行號
fs使用的分隔符,預設是空格
示例如下:
cat a | awk ' ' # 對a中以:為分隔符,並列印第一列。第一行不會被正確列印,因為剛讀取時仍以空格為分隔符
cat a | awk 'begin ' # 解決第一行未正確顯示的問題
cat a | awk 'nr==1 ; nr>=2 ' #對第一行,開啟第1列,第2行之後,列印第3列
小結
正規表示式用途廣泛,剛開始有些規則難以記憶,用多了就好了。
一旦使用熟練,你會發現處理文字資料時效率會高很多。
正規表示式 sed awk
awk 萬用字元.1.正規表示式 首先,必須知道命令是否支援正規表示式,不然的話只能使用bash的萬用字元。然後,一定要分清楚萬用字元和正則的區別 萬用字元 表示任意字元 包括數量 而在正則中 表示任意數量個前一字元 萬用字元?表示乙個字元,在正則中用.表示乙個字元 正規表示式分為基礎正則和擴充套件...
shell中的正規表示式 sed awk
本文主要說一些正則的基本語法,並且結合linux的各種小工具 egrep sed awk 列舉一些使用例項。一 基本語法 正則的基本語法就大概是下面這些,但是正則遠不止這些,甚至可以寫一本書,當然了,我們這裡只列舉一些簡單的 用法,這些已經可以解決大部分實際問題了。1 字元類 字元 含義舉例 匹配任...
正規表示式簡介
乙個正規表示式就是乙個模式,由與文字進行匹配的字串行組成。正規表示式有著廣泛的應用 grep sed vim make等等,某些指令碼語言如perl等更是將正規表示式納入語言內部。正規表示式由原子和運算子組成。最簡單的原子是單個字元,如果乙個正規表示式由單個字元組成,則該字元必須出現在目標文字的某處...