Navigation dans le texte

Résolu/Fermé
Utilisateur anonyme - 15 déc. 2011 à 16:08
 Utilisateur anonyme - 15 déc. 2011 à 18:22
Bonjour à tous,

Voici l'énoncé : J'ai besoin d'un script qui fasse ceci :

Nombre1=54154151454151
Nombre2=54154121358989
(...)
Nombre24=91754276213778

On prend le nombre en question pour chaque nombre = xx.., et on le place dans un autre fichier texte, entre les " ", 2 fois de suite en utilisant la phrase si dessous:

Eh oui, le nombre était "xxxxxxxx", vous avez bien entendu, "xxxxxxxx"

Donc en gros, le script va recopier dans un fichier texte vide :

Eh oui, le nombre était "xxxxxxxx", vous avez bien entendu, "xxxxxxxx"

24 fois avec le nombre correspondant.

Si je ne suis pas claire, dîtes le moi ;-)

Au passage, ce script m'aidera d'une part pour l'automatisation que je veux faire. Et d'autre part à utiliser sed, car je pense que c'est à lui que l'on va faire appel.

Merci à vous tous.


5 réponses

zipe31 Messages postés 36402 Date d'inscription dimanche 7 novembre 2010 Statut Contributeur Dernière intervention 27 janvier 2021 6 415
15 déc. 2011 à 16:22
Salut,

$ cat plop
Nombre1=54154151454151
Nombre2=54154121358989
Nombre24=91754276213778

$ sed 's/\(.*=\)\(.*\)/Eh oui, le nombre était "\2", vous avez bien entendu, "\2"/' plop 
Eh oui, le nombre était "54154151454151", vous avez bien entendu, "54154151454151"
Eh oui, le nombre était "54154121358989", vous avez bien entendu, "54154121358989"
Eh oui, le nombre était "91754276213778", vous avez bien entendu, "91754276213778"

$
0
Utilisateur anonyme
15 déc. 2011 à 16:42
Salut Zipe,

Génial ta commande, mais j'ai un soucis, dans le fichier texte, il y a aussi lettre=jfncjece...

Donc du coup ça ne fonctionne pas.. J'aurais sûrement du le préciser mais sur le coup je n'y ai pas pensé...

(sourire)

Merci à toi :-)
0
zipe31 Messages postés 36402 Date d'inscription dimanche 7 novembre 2010 Statut Contributeur Dernière intervention 27 janvier 2021 6 415
15 déc. 2011 à 16:52
Bon, à quoi ressemble exactement le fichier AVANT et surtout à quoi doit-il ressembler APRÈS ?
0
Utilisateur anonyme
15 déc. 2011 à 16:58
AVANT

Chiffre mystère=XXXXXXX
Clef secrète=XXXXXX

Nombre1=54154151454151
Nombre2=54154121358989
(...)
Nombre24=91754276213778

Lettre1=jdnedljdoejzbfêofne
Lettre2=jefoefejbduiezdkzne
(...)
Lettre24=klejfnejfnegzurongr

APRES

Eh oui, le nombre était "54154151454151", vous avez bien entendu, "54154151454151"
Eh oui, le nombre était "54154121358989", vous avez bien entendu, "54154121358989"
Eh oui, le nombre était "91754276213778", vous avez bien entendu, "91754276213778"
(...)


On exclut tout sauf nombre..
0
zipe31 Messages postés 36402 Date d'inscription dimanche 7 novembre 2010 Statut Contributeur Dernière intervention 27 janvier 2021 6 415
15 déc. 2011 à 17:02
$ cat plop 
Chiffre mystère=XXXXXXX
Clef secrète=XXXXXX

Nombre1=54154151454151
Nombre2=54154121358989
(...)
Nombre24=91754276213778

Lettre1=jdnedljdoejzbfêofne
Lettre2=jefoefejbduiezdkzne
(...)
Lettre24=klejfnejfnegzurongr

$ sed -n '/^Nombre/ s/\(.*=\)\(.*\)/Eh oui, le nombre était "\2", vous avez bien entendu, "\2"/p' plop 
Eh oui, le nombre était "54154151454151", vous avez bien entendu, "54154151454151"
Eh oui, le nombre était "54154121358989", vous avez bien entendu, "54154121358989"
Eh oui, le nombre était "91754276213778", vous avez bien entendu, "91754276213778"

$ 
0
Utilisateur anonyme
15 déc. 2011 à 17:09
Merci beaucoup ça fonctionne ;-)

Peux-tu m'expliquer cette partie :

sed -n '/^Nombre/ s/\(.*=\)\(.*\)/Eh oui, le nombre était "\2", vous avez bien entendu, "\2"/p'

Et pourquoi utiliser "/2" ? C'est la variable x dans nombre=x, mais qu'est ce qui la déclare ?
0
zipe31 Messages postés 36402 Date d'inscription dimanche 7 novembre 2010 Statut Contributeur Dernière intervention 27 janvier 2021 6 415
15 déc. 2011 à 17:19
Plutôt que de grands discours : Les sous-expressions et références arrières ;-))
0
Utilisateur anonyme
15 déc. 2011 à 17:25
Donc /2 -> (.*\) ?
0
zipe31 Messages postés 36402 Date d'inscription dimanche 7 novembre 2010 Statut Contributeur Dernière intervention 27 janvier 2021 6 415
15 déc. 2011 à 17:28
Oui.

/\(.*=\)
Correspond à la 1ère sous-expression (\1) qui comprend tout le début de la ligne jusqu'au signe égale.


\(.*\)
Correspond à la 2ème sous-expression (\2) qui comprend tout ce qui se trouve après le signe égale jusqu'à la fin de la ligne
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Utilisateur anonyme
15 déc. 2011 à 17:37
D'accord merci ;-)

Une autre question. Les caractères spéciaux valent pour toutes lignes de code ? Un * sera toujours un * qu'il soit dans une ligne avec dpkg ou sed ?

Dernière chose, j'ai beau lire et relire, les regex j'ai du mal, c'est quoi exactement ?

Je me suis farcis tout Wipikédia, toujours pas compris.. Enfin je saisie les grandes lignes, mais sans plus..
0
zipe31 Messages postés 36402 Date d'inscription dimanche 7 novembre 2010 Statut Contributeur Dernière intervention 27 janvier 2021 6 415
15 déc. 2011 à 17:55
Une autre question. Les caractères spéciaux valent pour toutes lignes de code ? Un * sera toujours un * qu'il soit dans une ligne avec dpkg ou sed ?
Oui et non. En gros oui ils ont toujours la même signification, mais chaque programme peut les implémenter différemment ;-\


Dernière chose, j'ai beau lire et relire, les regex j'ai du mal, c'est quoi exactement ?
Ça c'est un monde à elles toutes seules.
Pour reprendre la description qu'il en est fait dans la faq sur sed :

Une expression régulière est un motif (pattern en anglais) qui entre en correspondance, de la gauche vers la droite, avec une chaîne de caractères.

Les expressions régulières tirent leur puissance de leurs capacités d'inclure des alternatives et des répétitions dans l'élaboration du modèle constituant le motif. Ces spécificités sont élaborées à l'aide de caractères spéciaux, qui ne sont pas interprétés au sens littéral du terme, mais d'une façon spécifique.
0
Utilisateur anonyme
15 déc. 2011 à 17:58
Donc regex = caractères spéciaux ?
0
zipe31 Messages postés 36402 Date d'inscription dimanche 7 novembre 2010 Statut Contributeur Dernière intervention 27 janvier 2021 6 415
15 déc. 2011 à 18:03
Oui. Et pour reprendre la citation ci-dessus :

Ces spécificités sont élaborées à l'aide de caractères spéciaux, qui ne sont pas interprétés au sens littéral du terme, mais d'une façon spécifique.
0
Utilisateur anonyme
15 déc. 2011 à 18:15
D'accord je te remercie ;-))

Vraiment une dernière dernière chose :

sed 's/\|/\\/' -> ça remplace les | en \ sur tout le texte ?
0
zipe31 Messages postés 36402 Date d'inscription dimanche 7 novembre 2010 Statut Contributeur Dernière intervention 27 janvier 2021 6 415
15 déc. 2011 à 18:21
Non ;-\

Il ne faut pas échapper le caractère "|" (on ne l'échappe (avec sed) que pour indiquer dans un motif ou l'une ou l'autre entre 2 correspondances), et il faut mettre le flag "g" (globalité) pour prendre en considération toutes les occurrences trouvées, sans quoi seule la 1ère rencontrée sera modifiée.

sed 's/|/\\/g'
0