Você pode fazer isso em sed da seguinte forma:
sed -n '/^80:82:87/ { s/;//g; y/abcdefghijklmnopqrstuvwxyz/ABCDEFGHIJKLMNOPQRSTUVWXYZ/; p }'
- A opção
-ninformasedpara não imprimir sua entrada exceto quando especificamente direcionado a fazê-lo. - O
/^80:82:87/diz que os comandos dentro das chaves{…}deve ser executado apenas nas linhas que começam com80:82:87. Isso fornece a mesma funcionalidade que ogrep. Você nunca precisará canalizargrepparasedouawk. - O comando
s/;//gexclui todos os pontos-e-vírgulas na linha, que é o que você disse que quer. Se você quis dizer dois pontos, simplesmente mude paras/://g. - O comando
yconverte todas as letras minúsculas (romanas / ASCII) em maiúsculas. Se você só precisa converter endereços MAC (e / ou outros valores hexadecimais), você pode obter comy/abcdef/ABCDEF/. - Finalmente, imprima a linha modificada.
@jasonwryan me empurrou para perceber que o complicado comando y
pode ser substituído por s/[[:lower:]]/\U&/g , s/[[:alpha:]]/\U&/g ,
ou mesmo s/.*/\U&/ - mas somente se você estiver usando o GNU sed.
\U não parece estar definido no POSIX.