Précédent   Forum des professionnels en informatique > Systèmes > Linux > Applications > Shell
Shell Vos questions sur l'utilisation des commandes shell
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 11/01/2011, 16h16   #1
Invité de passage
 
Inscription : janvier 2011
Messages : 13
Détails du profil
Informations forums :
Inscription : janvier 2011
Messages : 13
Points : 0
Points : 0
Par défaut sed en ajoutant une ligne à $ligne

Bonjour mes amis

je débute dans le shell, j'ai un petit script à faire tourner, et je n'arrive pas encore à trouver la solution ( la fonction sed est un peu sombre..) pour mon besoin.

Voilà , j'ai un script qui tourne en
Code :
1
2
3
4
for F in *.txt
do
xxxxxx
done
j'ai un souci sur mon sed.
mon besoin : j'ai donc plusieurs fichiers txt, et j'aimerai ajouter à n ligne, une ligne du type :

donc j'ai fait :
Code :
1
2
3
 
sed 8a\  s/'\blablablabla/'\ $F> $F.clean
mv $F.clean F$
je lance donc mon script et rien du tout sur ma ligne ciblée.
j'ai surement oublié un truc.

pouvez vous m'aider ?
kakolac est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/01/2011, 17h05   #2
Invité de passage
 
Inscription : janvier 2011
Messages : 13
Détails du profil
Informations forums :
Inscription : janvier 2011
Messages : 13
Points : 0
Points : 0
Par défaut ou je pense à une autre solution

j'aimerai si c'est possible, non pas d'ajouter à partir d'un nombre de ligne mais à partir de caractère sur une ligne et automatiquement , ajouter une ligne juste après avec mon blablabla
kakolac est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/01/2011, 20h08   #3
Expert Confirmé Sénior
 
Avatar de frp31
 
Homme francois
Ingénieur systèmes et réseaux
Inscription : juillet 2006
Messages : 3 534
Détails du profil
Informations personnelles :
Nom : Homme francois
Âge : 35
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations professionnelles :
Activité : Ingénieur systèmes et réseaux
Secteur : Aéronautique - Marine - Espace - Armement

Informations forums :
Inscription : juillet 2006
Messages : 3 534
Points : 7 743
Points : 7 743
en utilisant la commande append ou insert de sed par exemple
ici j'ajoute tyty apres la ligne ou il y a tata

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
 
operateur@undertaker:/tmp$ cat > test
toto
titi
tata
tutu
operateur@undertaker:/tmp$ sed "/tata/a\
> tyty
> " test
toto
titi
tata
tyty
tutu
operateur@undertaker:/tmp$
bien sur tu peux garder cette structure dans une boucle mais dans ce cas toutes les iterations successivent peuvent avoir un resulat inatendu si tu ne définis pas très sévèrement les expressions sur lequelles tu veux intervenir.

dans ton cas qui consiste a faire ça sur N fichiers :
tu n'est pas ennuyé
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
 
operateur@undertaker:/tmp$ cp test test2 
operateur@undertaker:/tmp$ cp test test3 
operateur@undertaker:/tmp$ for i in test* ; do sed "/tata/a\
> tyty
> " $i > $i.new ; mv $i $i.old ; mv $i.new $i ; done
operateur@undertaker:/tmp$ cat test test2 test3
toto
titi
tata
tyty
tutu
 
toto
titi
tata
tyty
tutu
 
toto
titi
tata
tyty
tutu
operateur@undertaker:/tmp$ rm test*
frp31 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/01/2011, 11h44   #4
Invité de passage
 
Inscription : janvier 2011
Messages : 13
Détails du profil
Informations forums :
Inscription : janvier 2011
Messages : 13
Points : 0
Points : 0
Par défaut merci pour le coup de main mais je comprends toujorus pas :-)

si j'ai bien compris ta réponse, on met un guillemet au commencement et à la fin ( fin de balise finalement) : c'est bien ça ? je mettais des côtes...

De plus, pour la ligne dont je veux insérer par la suite une ligne, elles contiennent des caractères du type "et > ( idem sur la ligne à ajouter)
dois je mettre des côtes pour prendre en compte les caracètres spéciaux ?

en gros, je me retrouve toujours sans réponse.

Code :
1
2
3
4
5
6
7
for F in *.txt
do
echo test $F
sed "  /xxxxxxxx>à"xxxxx/a\
> xxxx>xxxx>à"xxxxx
mv $F.new $F
done
kakolac est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/01/2011, 14h43   #5
Expert Confirmé Sénior
 
Avatar de frp31
 
Homme francois
Ingénieur systèmes et réseaux
Inscription : juillet 2006
Messages : 3 534
Détails du profil
Informations personnelles :
Nom : Homme francois
Âge : 35
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations professionnelles :
Activité : Ingénieur systèmes et réseaux
Secteur : Aéronautique - Marine - Espace - Armement

Informations forums :
Inscription : juillet 2006
Messages : 3 534
Points : 7 743
Points : 7 743
les caracteres spéciaux se protègent avec un "\"

\&
\*
etc....
frp31 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/01/2011, 14h24   #6
Invité de passage
 
Inscription : janvier 2011
Messages : 13
Détails du profil
Informations forums :
Inscription : janvier 2011
Messages : 13
Points : 0
Points : 0
Par défaut Merci ^ ^

dernière chose avant de te laisser tranquile
Comment connaitre la version de son vi ?
car j'ai cru entendre que selon des versions, les Sed peuvent différer selon leurs résultats.
kakolac est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/01/2011, 15h28   #7
Expert Confirmé Sénior
 
Avatar de frp31
 
Homme francois
Ingénieur systèmes et réseaux
Inscription : juillet 2006
Messages : 3 534
Détails du profil
Informations personnelles :
Nom : Homme francois
Âge : 35
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations professionnelles :
Activité : Ingénieur systèmes et réseaux
Secteur : Aéronautique - Marine - Espace - Armement

Informations forums :
Inscription : juillet 2006
Messages : 3 534
Points : 7 743
Points : 7 743
vi
:version

mais sed donne toujours les même résultats dans le cas contraire c'est pour une des raisons suivantes :
lancement avec la mauvaise option de gestion (-e, -n etc....)
les regexp n'ont pas été définies avec suffisamment de précision
les patterns recherches sont mal définis ou pire mal isolés

nota :
tu peux aussi utiliser
vi -c "commandes'' fichier

un bon aide memoire
http://www.unixguide.net/unix/sedoneliner.shtml
http://http://en.wikipedia.org/wiki/Regular_expression
frp31 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 19h37.


 
 
 
 
Partenaires

Hébergement Web