sed使用正則表達式進行替換例子以及注意事項
sed中使用正則表達式進行替換的時候,一定要注意,有些特殊字符在使用時要轉(zhuǎn)義,目前發(fā)現(xiàn)的有:
- 用于分組的小括號:(),在使用時要用\進行轉(zhuǎn)義,但是匹配字符串中真正的小括號時,無需轉(zhuǎn)義;
- 表示前面的表達式出現(xiàn)次數(shù)的{},也要轉(zhuǎn)義;
- 表示前面的表達式出現(xiàn)1次或多次的+,也要轉(zhuǎn)義,在使用時,要用\+
- 表示前面的表達式至多出現(xiàn)1次?,也要轉(zhuǎn)義,在使用時,要用\?
不需要轉(zhuǎn)義的特殊字符:
- 用于表示字符集的[]
- 表示前面的表達式出現(xiàn)0次或多次的*
有些特殊字符在sed的正則表達式中不能用,比如要表示匹配一個數(shù)字不能用\d,而要用[0-9],例如:
#想要把u8Speed中的8替換為32,方法一失敗,方法二成功: >echo "u8Speed" |sed -e 's/\d/32/g' >u8Spee32 >echo "u8Speed" |sed -e 's/[0-9]/32/g' >u32Speed
但是\b、\w可以用,分別表示單詞邊界,字母數(shù)字下劃線即[a-zA-Z0-9_]
此貼持續(xù)更新,后續(xù)發(fā)現(xiàn)需要轉(zhuǎn)義的或者不需要轉(zhuǎn)義的,會不斷更新。
sed使用正則表達式替換的例子:
#例1: >echo "VAR(int, AAAAA) b;" |sed -e 's/\bVAR(\([a-z]\{1,\}\),\( \)*\([A-Z]\+\))/\1/g' >int b; #上面的命令中,{}、+、()都進行了轉(zhuǎn)義 #此命令的功能是,將autosar風格的變量定義,轉(zhuǎn)換成常見的變量定義,上述命令輸出結(jié)果為: #int b; #例2: 對于宏進行替換: #define GetData(u8, speed, (int)ZERO) u8speed[(int)ZERO] >echo "GetData(u8, speed, (int)ZERO);" |sed -e 's/\bGetData(\?\(\w\+\), *\(\w\+\), *\((\?\w\+)\?\)\(\w\+\))/\1\2[\3\4]/g' >u8speed[(int)ZERO]
附:sed 關鍵字匹配整行中任意字符進行替換(正則表達式整行替換)
語法:
sed -i 's/.*要查找的字串符.*/要替換的字串符/' a.txt
實戰(zhàn)示例:
場景:
查找文本文件 [a.txt] 中包含字串符 [privatekey] 的行將其替換為 123456.
執(zhí)行命令如下:sed -i 's/.*privatekey.*/123456/' a.txt
執(zhí)行替換前:
執(zhí)行替換后:
總結(jié)
到此這篇關于sed使用正則表達式進行替換例子以及注意事項的文章就介紹到這了,更多相關sed正則表達式替換內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
獲取服務器信息的Shell腳本分享(ubuntu、centos測試通過)
這篇文章主要介紹了獲取服務器信息的Shell腳本分享(ubuntu、centos測試通過),本文直接給出實現(xiàn)代碼,本文腳本實現(xiàn)獲取linux發(fā)行版名稱、查看系統(tǒng)是否為64位、系統(tǒng)內(nèi)核版本等信息,需要的朋友可以參考下2014-12-12Linux中查看服務器內(nèi)存/CPU/網(wǎng)絡占用情況的命令
這篇文章主要為大家整理了一些Linux中查看服務器內(nèi)存、CPU和網(wǎng)絡占用情況的命令,文中的示例代碼簡潔易懂,需要的小伙伴可以參考一下2023-08-08Shell調(diào)用curl實現(xiàn)IP歸屬地查詢的腳本
這篇文章主要介紹了Shell調(diào)用curl實現(xiàn)IP歸屬地查詢,文中給大家提到了查詢IP歸屬地的shell腳本,在批量查找數(shù)據(jù)的時候經(jīng)常會遇到,今天給大家分享出來,需要的朋友可以參考下2021-07-07Shell中調(diào)用、引用、包含另一個腳本文件的三種方法
這篇文章主要介紹了Shell中調(diào)用、引用、包含另一個腳本文件的三種方法,需要的朋友可以參考下2014-04-04