Você pode fazer isso em sed
da seguinte forma:
sed -n '/^80:82:87/ { s/;//g; y/abcdefghijklmnopqrstuvwxyz/ABCDEFGHIJKLMNOPQRSTUVWXYZ/; p }'
- A opção
-n
informased
para 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á canalizargrep
parased
ouawk
. - O comando
s/;//g
exclui 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
y
converte 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.