Quanto ao erro do seu script, você está substituindo A
ou a
por AB
e D
ou d
por DK
, portanto, qualquer B
ou K
preexistente não seria afetado; sed
não está procurando por isso. Você pode colocar um opcional [bB]
ou [kK]
usando ?
(zero ou um dos caracteres anteriores) para fazer com que ele substitua esse caractere também se ocorrer.
Para garantir que a substituição só aconteça se [aA]
ou [aA][bB]
etc for seguido por um número, você poderá adicionar o número ao padrão e adicioná-lo novamente à substituição por ()
e
sed -r 's/ab?([0-9])/AB/Ig;s/dk?([0-9])/DK/Ig' filename
Estou usando -r
para usar ERE (portanto, não é preciso escapar de ?
) e I
para pesquisa sem distinção entre maiúsculas e minúsculas, em vez de usar classes de caractere.