特定の形式の数字と文字で構成される複数の長さの単語から特定の文字を置き換える方法は?

特定の形式の数字と文字で構成される複数の長さの単語から特定の文字を置き換える方法は?

ファイルがあり、その中にある次の形式のすべてのコードを変更したいと思います。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文字)を配置して、その文字が発生したときにその文字を置き換えることができます。ABDdDKBKsed[bB][kK]?

[aA]または、次に数字が続くときにのみ置換が行われるようにするには、パターンに[aA][bB]数字を追加してから、を使用して()置換に再度追加できます。\1

sed -r 's/ab?([0-9])/AB\1/Ig;s/dk?([0-9])/DK\1/Ig' filename

私は文字クラスを使用する代わりに-rERE(Escapeを必要としません?)と大文字と小文字を区別しない検索を使用することに慣れています。I

おすすめ記事