Comment utiliser sed pour supprimer certaines bases de texte sur une expression régulière


0

J'ai un fichier texte avec un contenu comme ci-dessous

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

Je souhaite utiliser sed pour changer ce qui précède en

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

J'ai essayé la commande suivante

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

Mais ça me donne

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

Qu'ai-je fait de mal?

Merci!

Réponses:


1

Vous devriez changer légèrement votre sed commander:

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

1

Au-dessous de la regex est la base, placez les caractères d'échappement nécessaires

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

Remplacer par \1XXX\3

Après avoir placé les caractères d'échappement appropriés, je pense que cela devrait ressembler à ceci.

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

1

Cela pourrait fonctionner pour vous:

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

Merci, ceci est plus concis ... mais pourrait ne pas fonctionner si le mot de passe contient le caractère ".."
forestclown
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.