Como usar o sed para remover certa base de texto em expressões regulares


0

Eu tenho um arquivo de texto com o conteúdo abaixo

2012/03/15 : "Password":"@#4JF9u92r","Name":"John"

Desejo usar o sed para alterar o acima para

2012/03/15 : "Password":"XXX","Name":"John"

Eu tentei o seguinte comando

cat log.txt | sed 's/\("Password":\"\)\(.*\)\(\",\"Name\":\)/\1XXX/'

Mas isso me dá

2012/03/15 : "Password":"XXX"John"

O que eu fiz errado?

Obrigado!

Respostas:


1

Você deve alterar ligeiramente seu sedcomando:

sed 's/\("Password":\"\).*\(\",\"Name\":\)/\1XXX\2/'

1

Abaixo do regex está o base, coloque os caracteres de escape necessários

(\s"Password":")(.*?)(","Name":"(.*?)")

Substituir com \1XXX\3

Depois de colocar os caracteres de escape adequados, acho que deve ser algo assim.

cat log.txt | sed '\(s/\"Password\":\"\)\(.*?\)\(\",\"Name\":\"\(.*?\)\"\)/\1XXX\3/'

1

Isso pode funcionar para você:

echo '2012/03/15 : "Password":"@#4JF9u92r","Name":"John"' |
sed 's/\("Password":"\)[^"]*/\1XXX/'
2012/03/15 : "Password":"XXX","Name":"John"

Obrigado, isso é mais conciso ... mas pode não funcionar se a senha conter o "caráter ..
forestclown
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.