2009-10-23 7 views
1

J'ai plusieurs identifiants d'email dans certains fichiers de configuration dans un répertoire; J'exécute mes scripts sur une machine Solaris. Je veux effectuer les opérations suivantes:Comment puis-je remplacer toutes les adresses hotmail.com dans un fichier par une autre adresse e-mail, en utilisant Perl?

Trouvez tous les email_id dans les fichiers de configuration dans un répertoire: par exemple: [email protected]; [email protected]; [email protected]; [email protected]

Remplacer tous les id existantes présentant: [email protected]

La mise en œuvre suivante peut me aider à remplacer « hotmail » avec « gmail » pour tous les email de ids dans les fichiers de configuration. Mais je suis un peu confus pour résoudre le problème ci-dessus

perl -pi -e 's/\@hotmail/\@gmail/g' * 

Merci d'avance!

+0

Etes-vous sûr que vous ne voulez pas faire des sauvegardes de vos fichiers que vous allez? 'perl -pi.bak blahblahblah' Voir http://perldoc.perl.org/perlrun.html#*-i*[_extension_] pour plus d'informations. – daotoad

+0

Le lien devrait être: 'perldoc.perl.org/perlrun.html # * - i * [_ extension_]' SO le mange si je mets le http au premier plan. – daotoad

Répondre

4
+0

Fantastique Heferav! excellente soulution. – novice

+0

Heureux que cela a fonctionné. Regex est très puissant si vous l'utilisez correctement – heferav

+2

Il peut également être très puissant si vous l'utilisez mal. Vous devriez échapper au point pour qu'il ne corresponde pas à n'importe quel ancien personnage. – innaM

0

Qu'est-ce que vous avez besoin est un éditeur avec regex/remplacement global (et assurez-vous qu'il crée des fichiers * .bak)

sûr, ce codage est amusant ..

+1

Mais l'expression régulière correcte pour y parvenir serait toujours nécessaire. – Rahul

+1

Je n'ai pas prétendu que ce n'était pas .. Je soulignais, que l'écriture d'un programme pourrait ne pas être la solution idéale, à moins que le problème se pose souvent. – lexu

0

en utilisant la solution postée par heferav, je ne semble pas obtenir la réponse

$ more file 
[email protected] ; [email protected] ; [email protected] ; [email protected] 
$ perl -ne 'print if s/\[email protected]\.com/[email protected]/g' file 
wxyz.com ; wxyz.com ; wxyz.com ; wxyz.com 

peut-être me manque donc méthing. @OP, puisque vous travaillez dans Solaris, je suppose que vous pouvez utiliser nawk

$ nawk '{ for(i=1;i<=NF;i++){gsub(/.*@hotmail.com/,"[email protected]",$i)} }1' file 
[email protected] ; [email protected] ; [email protected] ; [email protected] 
Questions connexes