Linux
如何替換由特定格式的數字和字母組成的多長度單詞中的一些字母?
我有一個文件,我想在其中更改所有具有以下格式的程式碼:
n{,3}L{,2}n{,5} where n= [0-9] any number and L [a-zA-Z] any letter either capital or not
我想將 A 或 a 更改為 AB 並將 d 或 D 更改為 DK,如下所示:
Annnnn--> ABnnnnn ; Dnnn-->DKnnn
該文件如下所示:
$ cat filename 123a67,64,xx A67990,12,ttt 89d7,34,ggg 234AB445,78,ooo 145aB7699,67,rrr 278Dk89,25,ppp
我嘗試了以下 sed 腳本
sed 's/[aA]/AB/g;s/[dD]/DK/g' filename
它適用於只有 A 或 D 的實例,但對於那些已經是 AB 或 DK 的實例,它將字母加起來為
AB--> ABB or DK-->DKK
。任何幫助表示讚賞解釋。謝謝!
至於您的腳本有什麼問題,您將 or 替換
A
為a
andAB
orD
withd
,DK
因此任何預先存在的B
orK
都不會受到影響;sed
不是在尋找它。您可以放置一個可選[bB]
或[kK]
使用?
(前面的零個或一個字元)以使其在該字元發生時也替換該字元。為確保僅當
[aA]
or[aA][bB]
etc 後跟一個數字時才會發生替換,您可以將數字添加到模式中並將其添加回替換()
中\1
sed -r 's/ab?([0-9])/AB\1/Ig;s/dk?([0-9])/DK\1/Ig' filename
我
-r
使用 ERE (所以不需要 escape?
)和I
不區分大小寫的搜尋,而不是使用字元類。