1. shell中的正則和原生的正則有些許出入, 以下列舉了shell中的正則規則:
圖中\number 代表前面對應()位置的內容, 類似於python中的命名分組, \對應數字可直接引用括號中內容
注意擴展正則元字符的使用結果可能和預期有差異, 對比擴展和基本兩個截圖, 會發現, 同樣的一個字符, 會使用\, 這就是
問題所在, 在grep中默認使用的都是基本元字符, 要想使用擴展元字符可在對應位置加\ 或者使用egrep來代替grep命令.
2. shell中的正則使用舉例:
雙括號的額外含義, 其內可使用正則表達式, 並不表示正則必須在雙括號中才能執行;
[[ 10 =~ ^[0-9]+$ ]] 用於shell中判定是否是數字, 注意正則處不要加引號, 加引號表示字符串匹配; 取反在10前加嘆號即可;
shell中這些命令都是根據正則規則來解析的, 有vi, grep, sed, awk, python, vim;
3. vim中使用正則進行查找與替換:
vim編輯器中的替換, %表示全文, 即第一行到最后一行. s表示替換, 完整命令如下:
: %s/xx/XX/ # 表示把小寫xx換為大寫的, 只替換第一個, 無論第一個是否是單純的xx或包含其他字符的
: %s/ss/SS/g # 替換全局, 所有包含ss的都替換, 無論ss是否是單獨的.
: %s/\<ss\>/SS/g # \< \>用於限定詞首和詞尾, 限定ss兩邊不能有字母, 標點除外
正則中嚴格區分大小寫, shell中匹配不會嚴格區分
4. shell中的and和or用法舉例:
[ 1 -lt 2 -a 5 -gt 10 ] [ 1 -lt 2 -o 5 -gt 10 ]
[[ 1 -lt 2 && 5 -gt 10 ]] [[ 1 -lt 2 || 5 -gt 10 ]] # 等價於上面的寫法