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!

floresta
fonte

Respostas:

1

Você deve alterar ligeiramente seu sedcomando:

sed 's/\("Password":\"\).*\(\",\"Name\":\)/\1XXX\2/'
bmk
fonte
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/'
Siva Charan
fonte
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"
potong
fonte
Obrigado, isso é mais conciso ... mas pode não funcionar se a senha conter o "caráter ..
forestclown