ファイルがあり、その中にある次の形式のすべてのコードを変更したいと思います。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
。助けと説明をお願いします。ありがとうございます!
答え1
スクリプトの問題A
はorをandにa
置き換えるため、既存のorは影響を受けません。オプションまたは使用(前にゼロまたは1文字)を配置して、その文字が発生したときにその文字を置き換えることができます。AB
D
d
DK
B
K
sed
[bB]
[kK]
?
[aA]
または、次に数字が続くときにのみ置換が行われるようにするには、パターンに[aA][bB]
数字を追加してから、を使用して()
置換に再度追加できます。\1
sed -r 's/ab?([0-9])/AB\1/Ig;s/dk?([0-9])/DK\1/Ig' filename
私は文字クラスを使用する代わりに-r
ERE(Escapeを必要としません?
)と大文字と小文字を区別しない検索を使用することに慣れています。I