Pages : 1
#1 Le 27/07/2015, à 14:47
- zackalucard
[Résolu] Sed d'un Grep
Bonjour à tous,
J'ai un petit problème pour effectuer la commande Sed sur le résultat d'un Grep.
En fait, il s'agit simplement de modifier le résultat issu d'un Grep par un Sed.
Par exemple :
cat essai.txt | grep toto | sed "s/.../coucou/g" | grep coucou
mais avec quelque chose à la place des "...".
Quelqu'un aurait-il une idée ?
Merci par avance.
Dernière modification par zackalucard (Le 28/07/2015, à 16:10)
Hors ligne
#2 Le 27/07/2015, à 16:49
- grigouille
Re : [Résolu] Sed d'un Grep
Cela fonctionne sans problème :
$ cat tutu
a
a
b
b
a
$ cat tutu | sed "s/a/o/g"
o
o
b
b
o
$
Debian (xfce) 12
HP LaserJet M1132 MFP
Hors ligne
#3 Le 27/07/2015, à 18:09
- erresse
Re : [Résolu] Sed d'un Grep
@grigouille: Ben, il est où le grep ???
Plus de 50 ans d'informatique, ça en fait des lignes de commandes en console, mais on n'avait pas le choix...
Excellente raison pour, aujourd'hui qu'on le peut, utiliser au maximum les INTERFACES GRAPHIQUES !
Important : Une fois le problème solutionné, pensez à clore votre sujet en ajoutant [Résolu] devant le titre du 1er message, et un bref récapitulatif de la solution à la fin de celui-ci. Merci.
Hors ligne
#4 Le 27/07/2015, à 18:22
- Watael
Re : [Résolu] Sed d'un Grep
salut,
c'est à dire que... comment dire... grep avec sed, c'est i nu tile !
et je ne vous dit pas pour cat.
Dernière modification par Watael (Le 27/07/2015, à 18:24)
Connected \o/
Welcome to sHell. · eval is evil.
Hors ligne
#5 Le 27/07/2015, à 18:35
- grigouille
Re : [Résolu] Sed d'un Grep
@grigouille: Ben, il est où le grep ???
sed lit l'entrée standard.
Debian (xfce) 12
HP LaserJet M1132 MFP
Hors ligne
#6 Le 27/07/2015, à 18:52
- elburgos
Re : [Résolu] Sed d'un Grep
@ Watael tout à fait d'accord, mais si seulement on avait un vrai exemple , on pourrait essayer de lui donner une commande fonctionnelle.
Mais même les motifs du sed sont secrets
Dernière modification par elburgos (Le 27/07/2015, à 19:18)
Envoyé depuis mon Windows Phone
Hors ligne
#7 Le 27/07/2015, à 20:23
- zackalucard
Re : [Résolu] Sed d'un Grep
Alors pour l'exemple (et il n'y a rien de secret) :
$cat essai.txt
...
restart = './restart_1/toto_***.mesh.h5'
...
Ce que je souhaite faire, c'est modifier ce qu'il y a entre les ' '.
C'est pour cette raison que j'utilise :
1. cat pour afficher mon fichier
2. grep toto pour trouver la ligne qui m'intéresse
3. sed "s/.../coucou/g" pour modifier la ligne en question (avec ... une commande qui permettrait de modifier la ligne entière, mais je ne connais pas cette commande, d'où mon poste)
4. grep coucou pour vérifier que ce que j'ai modifié est correct
Hors ligne
#8 Le 27/07/2015, à 20:47
- grigouille
Re : [Résolu] Sed d'un Grep
Peux-tu donner le résultat attendu ?
Debian (xfce) 12
HP LaserJet M1132 MFP
Hors ligne
#9 Le 27/07/2015, à 21:07
- zackalucard
Re : [Résolu] Sed d'un Grep
Le résultat que j'aimerais :
$cat essai.txt
...
coucou
...
ou encore mieux :
$cat essai.txt
...
restart = './coucou'
...
Hors ligne
#10 Le 27/07/2015, à 21:13
- metalux
Re : [Résolu] Sed d'un Grep
Bonsoir
sed -i "/toto.*/ s/\..*$/coucou'/" essai.txt
Est-ce que la syntaxe est toujours la même en commençant par un point ce qu'il y a entre guillemets? Dans le cas contraire, ce n'est pas la bonne commande.
Plus simple, autant substituer également le guillemet de début au cas ou la syntaxe diffère :
sed -i "/toto.*/ s/'.*$/'coucou'/" essai.txt
Dernière modification par metalux (Le 27/07/2015, à 21:32)
Hors ligne
#11 Le 28/07/2015, à 08:20
- zackalucard
Re : [Résolu] Sed d'un Grep
Merci metalux, c'est effectivement ce que je cherchais.
Une autre question, si maintenant je souhaite donner comme argument au substitute un chemin, comment dois-je m'y prendre ?
En reprenant l'exemple précédent, au lieu de coucou, je souhaite mettre la variable chemin contenant un nouveau chemin :
chemin='./restart_2/titi_***.mesh.h5'
sed -i "/toto.*/ s/'.*$/'$chemin'/" essai.txt
Le terminal m'indique alors l'erreur "bad flag in substitute command: 'r'"
Dernière modification par zackalucard (Le 28/07/2015, à 08:39)
Hors ligne
#12 Le 28/07/2015, à 11:12
- metalux
Re : [Résolu] Sed d'un Grep
C'est normal, la variable contenant des slash / , la substitution se passe mal. Le plus simple est d'utilisé un caractère délimiteur différent dans la substitution.
chemin='./restart_2/titi_***.mesh.h5'
sed -i "/toto.*/ s|'.*$|'$chemin'|" essai.txt
Le détail de la commande:
l'option -i pour modifier réellement le fichier.
toto.* pour faire l'équivalent d'un grep sur toto suivi de zéro, une ou plusieurs occurrences (l'étoile) de n'importe quel caractère (le point)
Puis la substitution avec l'option s
'.*$ signifie substituer ' (le guillemet) suivi de zero, une ou plusieurs occurrences (l'étoile) de n'importe quel caractère (le point) jusqu'à la fin de ligne (le dollar).
On remplace par la variable $chemin sans oublier le guillemet de fin comme on l'a substitué avec la fin de ligne $
puis on fini par passer le fichier à traiter, soit essai.txt
En utilisant le double-quote, ça évite d'avoir à échapper le simple quote et la variable $chemin est bien prise en compte même si il y a des espaces dans celle-ci. Dans le cas contraire, il faudrait l'isoler pour quelle soit bien prise en compte.
Hors ligne
#13 Le 28/07/2015, à 14:54
- zackalucard
Re : [Résolu] Sed d'un Grep
Super, ça marche bien !
Et merci beaucoup pour ces explications.
Hors ligne
#14 Le 28/07/2015, à 15:15
- metalux
Re : [Résolu] Sed d'un Grep
N'oublie pas de mettre le sujet en résolu en éditant ton 1er message et en modifiant le titre de façon qu'il commence par [Résolu]
Hors ligne
Pages : 1