Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#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 résolu, 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 !
lol
et je ne vous dit pas pour cat. wink

Dernière modification par Watael (Le 27/07/2015, à 18:24)


Connected \o/
Welcome to sHell. · eval is evil.

En ligne

#5 Le 27/07/2015, à 18:35

grigouille

Re : [Résolu] Sed d'un Grep

erresse a écrit :

@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 tongue

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] wink

Hors ligne