Précédent   Forum des professionnels en informatique > Systèmes > Autres systèmes > Unix
Unix Forum d'entraide sur les systèmes Unix et dérivés (*BSD, AIX, etc.). Avant de poster ->F.A.Q BSD F.A.Q. Aix
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 25/10/2011, 14h28   #1
Nouveau Membre du Club
 
Homme richard dean anderson
Ingénieur systèmes et réseaux
Inscription : août 2011
Messages : 28
Détails du profil
Informations personnelles :
Nom : Homme richard dean anderson
Localisation : Monaco

Informations professionnelles :
Activité : Ingénieur systèmes et réseaux
Secteur : Finance

Informations forums :
Inscription : août 2011
Messages : 28
Points : 30
Points : 30
Par défaut aide pour rajouter une valeur entre deux patterns (ou replace ligne avec retour charriot)

Bonjour,

J'ai ce jour un petit soucis dans un script que j'essaye de faire.

j'essaye actuellement d'insérer une ligne au milieu d'autres dans un fichier.

En effet, voici un exemple de mon fichier (j'ai mis des valeurs random à la place de mon fichier réel, c'est le même genre disons) :

fsd dsfsd fsdfsdfdsfds zerez 155.145.0.1
fsd random1 fsdfsdfdsfds zerez 155.145.0.2
fsd dsfsd fsdfsdfdsfds zerez 155.145.0.3
fsd randomX fsdfsdfdsfds zerez 155.145.0.9
fsd dssdfsd fsdfsdfdsfds zerez 155.145.0.27
fsd dsfsd fsdfsdfdsfds zerez 155.145.0.28
fsd dsfsd fsdfsdfdsfds zerez 155.145.0.29
fsd dsfsd fsdfsdfdsfds zerez 155.145.0.31
fsd dsfsd fsdfsdfdsfds zerez 155.145.0.72


mon objectif est le suivant :

pouvoir par exemple rajouter la ligne :

fsd dsfsd fsdfsdfdsfds zerez 155.145.0.14

au bon endroit (c'est à dire entre l'IP 9 et l'IP 27).

quelqu'un aurait-il un moyen de faire ça simplement ? (que ça soit avec sed, awk, ou peu importe l'outil, même si j'ai une préférence pour sed).

j'arriverais à la limite à scripter le système trouvant les lignes de départ et d'arrivée (celle avec 9 et 27), mais je ne vois pas trop comment faire en sorte de rajouter mon texte entre les deux.

dois-je fais un replace (substitute) de la ligne :

fsd dsfsd fsdfsdfdsfds zerez 155.145.0.9
et rajouter un retour chariot derrière, puis ma ligne avec l'IP 14 ?

si c'est le cas, quelqu'un pourrait-il me donner la commande sed en question pour ce type de truc ?

ex : sed -e 's/ligne_avec_ip9/$truc_pour_repeter_la_ligne\n$nouvelleligne/' mais j'ai fait pas mal de tests et ça ne fonctionne pas.

j'imagine aussi que l'intégralité est faisable plus simplement en awk, en faisant un tri sur la derniere colonne etc.. mais je connais mal awk

merci
frenchlion est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/10/2011, 14h43   #2
Expert Confirmé
 
Inscription : janvier 2011
Messages : 970
Détails du profil
Informations personnelles :
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations forums :
Inscription : janvier 2011
Messages : 970
Points : 2 871
Points : 2 871
Salut,

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
$ cat plop 
fsd dsfsd fsdfsdfdsfds zerez 155.145.0.1
fsd random1 fsdfsdfdsfds zerez 155.145.0.2
fsd dsfsd fsdfsdfdsfds zerez 155.145.0.3
fsd randomX fsdfsdfdsfds zerez 155.145.0.9
fsd dssdfsd fsdfsdfdsfds zerez 155.145.0.27
fsd dsfsd fsdfsdfdsfds zerez 155.145.0.28
fsd dsfsd fsdfsdfdsfds zerez 155.145.0.29
fsd dsfsd fsdfsdfdsfds zerez 155.145.0.31
fsd dsfsd fsdfsdfdsfds zerez 155.145.0.72

$ sed '/\.9$/a\
fsd dsfsd fsdfsdfdsfds zerez 155.145.0.14
' plop
fsd dsfsd fsdfsdfdsfds zerez 155.145.0.1
fsd random1 fsdfsdfdsfds zerez 155.145.0.2
fsd dsfsd fsdfsdfdsfds zerez 155.145.0.3
fsd randomX fsdfsdfdsfds zerez 155.145.0.9
fsd dsfsd fsdfsdfdsfds zerez 155.145.0.14
fsd dssdfsd fsdfsdfdsfds zerez 155.145.0.27
fsd dsfsd fsdfsdfdsfds zerez 155.145.0.28
fsd dsfsd fsdfsdfdsfds zerez 155.145.0.29
fsd dsfsd fsdfsdfdsfds zerez 155.145.0.31
fsd dsfsd fsdfsdfdsfds zerez 155.145.0.72

$
__________________
$ man woman
Il n'y a pas de page de manuel pour woman.
zipe31 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/10/2011, 14h50   #3
Expert Confirmé
 
Inscription : janvier 2011
Messages : 970
Détails du profil
Informations personnelles :
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations forums :
Inscription : janvier 2011
Messages : 970
Points : 2 871
Points : 2 871
Ces deux autres solutions marchent aussi :

Code :
1
2
3
$ sed '/\.27$/i\                                                   
fsd dsfsd fsdfsdfdsfds zerez 155.145.0.14
' plop
ou

Code :
sed 's/\.9$/&\nfsd dsfsd fsdfsdfdsfds zerez 155.145.0.14/' plop
__________________
$ man woman
Il n'y a pas de page de manuel pour woman.
zipe31 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/10/2011, 14h52   #4
Nouveau Membre du Club
 
Homme richard dean anderson
Ingénieur systèmes et réseaux
Inscription : août 2011
Messages : 28
Détails du profil
Informations personnelles :
Nom : Homme richard dean anderson
Localisation : Monaco

Informations professionnelles :
Activité : Ingénieur systèmes et réseaux
Secteur : Finance

Informations forums :
Inscription : août 2011
Messages : 28
Points : 30
Points : 30
merci bcp je vais tester un truc du genre.

n'y-a-t'il pas moyen de le faire sur une ligne ?

Zip31 : oui la première fonctionne aussi, j'ai bien compris l'histoire du i/a pour avant/après

en revanche le \n ne fonctionne pas dans ma version de sed (solaris 10)
j'ai un peu tout testé avec, et il me rajoute un n à la place du retour chariot
frenchlion est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/10/2011, 14h59   #5
Expert Confirmé
 
Inscription : janvier 2011
Messages : 970
Détails du profil
Informations personnelles :
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations forums :
Inscription : janvier 2011
Messages : 970
Points : 2 871
Points : 2 871
Citation:
Envoyé par frenchlion Voir le message
merci bcp je vais tester un truc du genre.

n'y-a-t'il pas moyen de le faire sur une ligne ?
Si. Mais il peut y avoir quelques désagréments provoqués par certains caractères (je ne sais plus lesquels) qui sont mal interprétés à cause de l'anti-slash, d'où mon habitude de passer à la ligne
__________________
$ man woman
Il n'y a pas de page de manuel pour woman.
zipe31 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/10/2011, 15h13   #6
Expert Confirmé
 
Inscription : janvier 2011
Messages : 970
Détails du profil
Informations personnelles :
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations forums :
Inscription : janvier 2011
Messages : 970
Points : 2 871
Points : 2 871
Citation:
Envoyé par frenchlion Voir le message
en revanche le \n ne fonctionne pas dans ma version de sed (solaris 10)
j'ai un peu tout testé avec, et il me rajoute un n à la place du retour chariot
Alors il te faudra te résigner à le faire sur 2 lignes

Code :
1
2
$ sed 's/\.9$/&\
fsd dsfsd fsdfsdfdsfds zerez 155.145.0.14/' plop
__________________
$ man woman
Il n'y a pas de page de manuel pour woman.
zipe31 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/10/2011, 15h52   #7
Nouveau Membre du Club
 
Homme richard dean anderson
Ingénieur systèmes et réseaux
Inscription : août 2011
Messages : 28
Détails du profil
Informations personnelles :
Nom : Homme richard dean anderson
Localisation : Monaco

Informations professionnelles :
Activité : Ingénieur systèmes et réseaux
Secteur : Finance

Informations forums :
Inscription : août 2011
Messages : 28
Points : 30
Points : 30
merci bcp c sympa
frenchlion est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 12h21.


 
 
 
 
Partenaires

Hébergement Web