2009-06-01 6 views

Répondre

9

je code normalement une seule ligne pour cela:

perl -i -pe 's/some/thing/' log.file 

Voir Here

+0

Mais pourquoi ne puis-je pas utiliser les backreferances? Comme perl -pi -e "s/foo (. *) Barre/barre $ 1foo /" tezt2 ne fonctionne pas .. –

+2

Votre shell est probablement corrompre la chaîne. Essayez de remplacer votre "" par "s" pour que le * ne soit pas étendu. –

+0

Merci d'avoir fait ça! –

8

Cela se fait souvent avec une seule ligne:

perl -pi.bak -e "s/find/replace/g" <file> 

Notez la partie -i.bak - Cela crée un fichier de sauvegarde avec l'extension .bak. Si vous voulez jouer sans filet, vous pouvez le faire pour remplacer le fichier existant sans une sauvegarde:

perl -pi -e "s/find/replace/g" <file> 
1

ou vous pouvez utiliser sed (je sais ... Vous avez demandé perl):

sed -i 's/find/replace/g' <file> 
+0

La façon dont sed traite les règles d'expression régulière est ... différente de celle de Perl, c'est le moins qu'on puisse dire. – GJTorikian

Questions connexes