正規表達式 Regular Expression ,早出現在 Perl 語言裡面,但是因為太好用所以即使不寫 Perl 也會遇到他,像是:
vim
的搜尋取代也是 Regular Expression
sed
也吃 Regular Expression
grep
也吃一部分的 Regular Expression
上面提到 sed
與 grep
可以吃一些的正規表達,以下我們來講講一些常用的正規表達字元吧:
^
:表示一行的最開頭,像是 ^function
就只會找出那些一開頭就有 function
的內容。$
:表示一行的最尾,像是 ;$
表示過濾出分號結尾的那幾行。[]
:用 []
包起來的字元,表示裡面的字元任選一個,像是 [aA]ction
就可以找出 action
或是 Action
[^]
: []
包起來多一個 ^
就表示排除,像是 [^D]uration
就會找出 duration
.
:這個 .
代表任意一個字元,像是 ..t
可以找出 cat 、 pet 等等。*
:這個 *
與丙級檢定裡面的 *
完全不同,他表示前面的字元可以重複無限個(也可以沒有),像是 ap*le
可以找出 ale 、 aple 、 apple 、 appple等等。grep
指令在第九天就稍微介紹過了,所以有興趣的請參考一下鐵人賽第九天的文章。
今天就來介紹一下 sed
跟正規表達搭配起來的用法吧, sed
的可以用正規表達來做搜尋取代,語法如下:
sed "s/搜尋/取代/g"
其中搜尋的部分當然可以用正規表達,而取代的部分假如你只是要加入字串,可以用 &
號把原本選起來字串保留下來,像是這樣(第一行寫兩次原本的搜尋條件,第二行則是用 &
號:
#sed "s/<div class=\"/<div class=\"items /g"
sed "s/<div class=\"/&items /g"
這樣就可以把所有的 div
加上 items
這個 class。
還有像有時候換行前塞了一堆空白,看不到但是又覺得不順眼,這時候就可以用以下的指令把指令最後面的空白全部拔掉:
sed "s/\ *$//g"
目前常用的 sed
就到這裡了,不過 sed
預設會把資料輸出到 stdout
,如果要直接修改檔案呢?
sed -i "s/\ *$//g"
目前常用的 sed
指令大概就到這邊啦。
我是誰?
我是 dd-han ,可以叫我呆翰,是國立臺中科技大學的延畢生 與 創科資訊的時習生。