Tenho um conjunto de hashes que quero tornar anônimos. Usando o GNU sed (v4.9), como posso substituir apenas partes do hash por outra coisa? Especificamente para o meu caso, quero preservar o $
símbolo se ele existir, mas apenas se estiver diretamente na frente do :
.
Exemplo:
USER:1234:aad3b435b:abcdef:::
COMPUTER$:4321:aad3b435b:abcdef:::
DOMAIN\bleh:5678:eaad3b4:fedcba:::
DOMAIN\$why:5678:eaad3b4:fedcba:::
Usando o seguinte comando, quase consigo obter o que quero
sed 's/[^$:]\+/REDACTED/1'
REDACTED:1234:aad3b435b:abcdef:::
REDACTED$:4321:aad3b435b:abcdef:::
REDACTED:5678:eaad3b4:fedcba:::
REDACTED$why:5678:eaad3b4:fedcba:::
No entanto, como pode ser visto, esta expressão regular sed corresponde à última entrada incorretamente. Em vez disso, deveria ser
REDACTED:5678:eaad3b4:fedcba:::
O comando sed deve substituir qualquer coisa entre o início da linha ^
e $:
OR :
.
Não sei o que estou fazendo errado. Tentei e tentei fazer a cláusula "or" funcionar corretamente usando agrupamento e lookahead/behind e caracteres de escape, mas não consigo obter o resultado que quero. Pelo que entendi, o sed usa regex básico por padrão, mas não consigo encontrar a solução usando -E
or -r
também...
Isso funciona para mim:
Um Perl:
Ou, como sugerido, uma visão antecipada:
Ou um awk:
Qualquer uma dessas impressões: