sed很早就支持正則表達式了监憎,這在文件處理中非常有用,以下列出一些常見用法(GNU SED版本)婶溯。
1. 行首/行尾
行首用^表示鲸阔,行尾用$表示。例如有如下test.txt文件:
如果我們想把其中第一列的Potri.去掉迄委,那么可以:
sed 's/^Potri.//g' test.txt
假如想在最后數(shù)字的后面加一列"yes":
sed 's/$/\tyes/g' test.txt
2. 匹配字符
(來自https://wiki.jikexueyuan.com/project/unix/regular-expressions.html)
比較常用的有:
字符 | 含義 |
---|---|
. | 匹配除換行符以外的任意字符 |
\w | 匹配字母或數(shù)字或下劃線 |
\s | 任意的空白符(包括空格制表符換頁符) |
[0-9] | 任意0到9中數(shù)字 |
[a-zA-Z] | 26個英文字母中的一個褐筛,不區(qū)分大小寫 |
3. 匹配在列表中的任意字符
用[]代表這樣的列表,比如:
echo -e "Cat\nBat\nHat" | sed -n '/[CH]at/ p'
結(jié)果輸出:
Cat
Hat
[]代表從其中選擇一個叙身。
4. 不在列表中的任意字符
echo -e "Cat\nBat\nHat" | sed -n '/[^CH]at/ p'
僅輸出Bat渔扎。
5. 匹配出現(xiàn)某種次數(shù)(+; * ; ?; {n}; {n,}; {m,n})
出現(xiàn)不止一次(>= 1): \+
出現(xiàn)0或1次:\?
出現(xiàn)n次:{n}
出現(xiàn)>=n次:{n,}
出現(xiàn)m到n次:{m, n}
注意前后括號{}都需要轉(zhuǎn)義。
6. 或者
或者 | 常與 () 一起使用信轿,注意兩者都需要反斜杠\轉(zhuǎn)義晃痴。
echo -e "Cat\nBat\nHat" | gsed -n '/\(C\|B\|H\)at/p'
7. 特殊字符轉(zhuǎn)義
一些特殊字符比如換行符\n或者回車\r等,匹配的時候在前面再加一個反斜杠轉(zhuǎn)義虏两,如\\r愧旦。
8. 例子
匹配上海市電話號碼:
# eg. 021-52060888
echo 021-52060888 | sed -n '/^012-[0-9]\{8\}/p'
匹配ip地址:
echo '127.255.255.254' | sed -n '/[0-9]\+.[0-9]\+.[0-9]\+.[0-9]\+/p'
值得注意的是,在sed中不支持\d匹配數(shù)字定罢,此處須用[0-9]笤虫。
歡迎關(guān)注!