OVH Cloud OVH Cloud

perl ligne de commandes

7 réponses
Avatar
ray
J'exp=E9rimente avec les commandes PERL et j'ai essay=E9 de faire un
search & replace (plusieurs commandes RE sur plusieurs fichiers. J'ai
cr=E9=E9 ce petit script qui =E9videment ne fonctionne pas.
question1. Peut-on faire un script avec les commandes perl ?
question 2. Peut-on utiliser la commande find ?

#!/bin/bash
$ perl -pi -e 's/\bteh\b/the/g' `find . -type f`
$ perl -pi -e 's/\bcat\b/mat/g' `find . -type f`

Merci de votre aide

7 réponses

Avatar
Dave
"ray" wrote in message
news:
J'expérimente avec les commandes PERL et j'ai essayé de faire un
search & replace (plusieurs commandes RE sur plusieurs fichiers. J'ai
créé ce petit script qui évidement ne fonctionne pas.
question1. Peut-on faire un script avec les commandes perl ?
question 2. Peut-on utiliser la commande find ?

#!/bin/bash
$ perl -pi -e 's/btehb/the/g' `find . -type f`
$ perl -pi -e 's/bcatb/mat/g' `find . -type f`

Merci de votre aide


1) Oui
2) Oui

supprime les $
Avatar
Dave
"Dave" wrote in message
news:44a37893$0$885$

"ray" wrote in message
news:
J'expérimente avec les commandes PERL et j'ai essayé de faire un
search & replace (plusieurs commandes RE sur plusieurs fichiers. J'ai
créé ce petit script qui évidement ne fonctionne pas.
question1. Peut-on faire un script avec les commandes perl ?
question 2. Peut-on utiliser la commande find ?

#!/bin/bash
$ perl -pi -e 's/btehb/the/g' `find . -type f`
$ perl -pi -e 's/bcatb/mat/g' `find . -type f`

Merci de votre aide


1) Oui
2) Oui

supprime les $




Je crois que tu veux plutot:

#!/bin/bash
perl -pi -e 's/btehb/the/g;s/bcatb/mat/g' `find . -type f`

et fait attention de ne pas mettre le script dans le repertoire sur lequel
il fonctionne.

Avatar
ray
Dave wrote:
"Dave" wrote in message
news:44a37893$0$885$

"ray" wrote in message
news:
J'expérimente avec les commandes PERL et j'ai essayé de faire un
search & replace (plusieurs commandes RE sur plusieurs fichiers. J'ai
créé ce petit script qui évidement ne fonctionne pas.
question1. Peut-on faire un script avec les commandes perl ?
question 2. Peut-on utiliser la commande find ?

#!/bin/bash
$ perl -pi -e 's/btehb/the/g' `find . -type f`
$ perl -pi -e 's/bcatb/mat/g' `find . -type f`

Merci de votre aide


1) Oui
2) Oui

supprime les $




Je crois que tu veux plutot:

#!/bin/bash
perl -pi -e 's/btehb/the/g;s/bcatb/mat/g' `find . -type f`

et fait attention de ne pas mettre le script dans le repertoire sur lequel
il fonctionne.


Peut-on ajouter la commande print ? pour obtenir la liste des
modifications
Merci


Avatar
Benoit Izac
Bonjour,

le 28/06/2006 à 19:07, ray a écrit dans le message
:

J'expérimente avec les commandes PERL et j'ai essayé de faire un
search & replace (plusieurs commandes RE sur plusieurs fichiers. J'ai
créé ce petit script qui évidement ne fonctionne pas.


Pourquoi ne postes-tu pas le code ?

question1. Peut-on faire un script avec les commandes perl ?


Oui, regarde la documentation dans perldoc File::Find. Ouvrir chaque
fichier qui t'intéresse, copier leur contenu dans un fichier après avoir
effectué les remplacements, copier le fichier où tu as mis les
modifications sur le fichier d'origine et supprimer le fichier
temporaire.

question 2. Peut-on utiliser la commande find ?

#!/bin/bash
$ perl -pi -e 's/btehb/the/g' `find . -type f`
$ perl -pi -e 's/bcatb/mat/g' `find . -type f`


Sur la ligne de commande, tu peux regrouper les instructions en les
séparant par un « ; ».

Le problème ici (qui n'a pas de rapport avec Perl) est que ta commande
ne fonctionnera pas si tu as un nom de fichier contenant par exemple un
espace ; find va renvoyer le nom du fichier qui sera vu comme deux
fichiers distincts par Perl. Soit ces fichiers n'existent pas et Perl
renverra une erreur soit un des noms correspondra à un fichier existant
sur le disque (et que tu ne voulais pas forcément modifier) et Perl va
effectuer les modifications.

% find . -type f -exec perl -pi -e 's/foo/bar/g' {} +
ou si tu as un système gnu
% find . -type f -print 0| xarg -0 perl -pi -e 's/foo/bar/g'

--
Benoit Izac

Avatar
Nicolas George
Benoit Izac wrote in message :
% find . -type f -exec perl -pi -e 's/foo/bar/g' {} +
ou si tu as un système gnu
% find . -type f -print 0| xarg -0 perl -pi -e 's/foo/bar/g'


perl -MFile::Find -pi -e 'BEGIN{find sub {-f $_ and push @ARGV,
$File::Find::name}, ".";} s/foo/bar/'

Pour tout faire en Perl.

Avatar
ray
Benoit Izac wrote:
Bonjour,

le 28/06/2006 à 19:07, ray a écrit dans le message
:

J'expérimente avec les commandes PERL et j'ai essayé de faire un
search & replace (plusieurs commandes RE sur plusieurs fichiers. J'ai
créé ce petit script qui évidement ne fonctionne pas.


Pourquoi ne postes-tu pas le code ?

question1. Peut-on faire un script avec les commandes perl ?


Oui, regarde la documentation dans perldoc File::Find. Ouvrir chaque
fichier qui t'intéresse, copier leur contenu dans un fichier après av oir
effectué les remplacements, copier le fichier où tu as mis les
modifications sur le fichier d'origine et supprimer le fichier
temporaire.

question 2. Peut-on utiliser la commande find ?

#!/bin/bash
$ perl -pi -e 's/btehb/the/g' `find . -type f`
$ perl -pi -e 's/bcatb/mat/g' `find . -type f`


Sur la ligne de commande, tu peux regrouper les instructions en les
séparant par un « ; ».

Le problème ici (qui n'a pas de rapport avec Perl) est que ta commande
ne fonctionnera pas si tu as un nom de fichier contenant par exemple un
espace ; find va renvoyer le nom du fichier qui sera vu comme deux
fichiers distincts par Perl. Soit ces fichiers n'existent pas et Perl
renverra une erreur soit un des noms correspondra à un fichier existant
sur le disque (et que tu ne voulais pas forcément modifier) et Perl va
effectuer les modifications.

% find . -type f -exec perl -pi -e 's/foo/bar/g' {} +
ou si tu as un système gnu
% find . -type f -print 0| xarg -0 perl -pi -e 's/foo/bar/g'

--
Benoit Izac


Merci pour ton aide. Je ne suis pas programmeur mais de temps en temps
je dois éditer un fichier et j'utilise PERL. Maintenant c'est quoi un
système GNU ?


Avatar
Benoit Izac
Bonjour,

le 29/06/2006 à 23:06, ray a écrit dans le message
:

Maintenant c'est quoi un système GNU ?


<http://fuckinggoogleit.com/search?q=gnu>

--
Benoit Izac