2012-12-04 5 views
1

Je vérifie pour voir si je peux remplacer un inclure comme ceci:Perl regexp remplacer?

#include <pathFoo/whatever.H> 

avec:

#include "whatever.H" 

de le faire, j'utiliser le commutateur -i, mais pour vérifier que je fais correctement, j'utilise simplement l'option -p sans -i. J'ai la commande suivante:

perl -p -e 's/<pathFoo\/\(.*\)>/"$1"' thefile 

mais cela ne fonctionne pas tout à fait et je ne sais pas exactement quelle partie est éteint?

Répondre

4

Vous ne voulez pas échapper aux parens, i.e. .:

perl -p -e 's/<pathFoo\/(.*)>/"$1"/' thefile 

devrait travailler pour vous.

Notez également la fin /.

1
perl -i~ -pe's!<pathFoo/(.*)>!"$1"!' file 

Ce qui suit est plus sûr:

perl -i~ -pe's!#include\s+\K<pathFoo/(.*)>!"$1"!' file 
0

Je pense que cela va vous arriver:

perl -pi -e 's{#include[ ]+<.+?/([^/]+)>}{#include "$1"}g' file 
1

Depuis TIMTOWTDI, voici une double substitution. Ou plutôt une substitution et une translittération:

perl -pe 's|^#include\s+<\KpathFoo/|| && tr/<>/""/' 

, retirez simplement la partie pathFoo/ d'abord, et si cela réussit, translitération alors les <> caractères entre guillemets.