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!

forestclown
la source

Réponses:

1

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

sed 's/\("Password":\"\).*\(\",\"Name\":\)/\1XXX\2/'
bmk
la source
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/'
Siva Charan
la source
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"
potong
la source
Merci, ceci est plus concis ... mais pourrait ne pas fonctionner si le mot de passe contient le caractère ".."
forestclown