Debian-facile

Bienvenue sur Debian-Facile, site d'aide pour les nouveaux utilisateurs de Debian.

Vous n'êtes pas identifié(e).

#1 03-07-2011 23:45:01

zaphir
Membre
Distrib. : Wheezy
Noyau : 3.2.0-4
(G)UI : Fluxbox
Inscription : 10-09-2010

Un petit coup de main pour une commande .....

Bonsoir ,

Bon déjà je m'excuse d'avance si la section n'est pas appropriée mais je ne vois pas laquelle correspond le mieux pour ma situation .
Voilà suite a ce topic  j'ai décider de me lancer dans un petit perfectionnement personnel sans prétention malgré mon faible niveau informatique et mon incompétence pour la conception de script.
C'est pourquoi je viens solliciter un peu d'aide afin que l'on me guide dans la manière de procéder pour que je puisse arriver a mes fins .
Le but de la manœuvre est de remplacer , dans un fichier , un caractère par un autre mais uniquement sur les lignes ne débutant pas un numéro.

Est-ce réalisable avec une seule commande ou bien faut il passer par un script ? ( je préfère la commande personnellement car j'ai vraiment du mal avec les scripts ....mais si c'est le seul moyen alors faudra que je jette à l'eau ).

Je ne cherche pas la réponse toute faite mais plutôt que vous m'aiguiller sur le schéma,la construction  à utiliser .
J'avais pensé à me baser sur la commande du topic mais en utilisant grep pour filtrer les lignes concernées , mais sans succès jusque là .
Mon idée  d'associer grep | sed  est elle correcte ?

Merci pour votre aide wink

Hors ligne

#2 04-07-2011 07:37:06

smolski
administrateur quasi...modo
Lieu : AIN
Distrib. : 8 (jessie) 64 bits + backports
Noyau : 4.6.0-0.bpo.1-amd64
(G)UI : gnome 3.14.1
Inscription : 21-10-2008

Re : Un petit coup de main pour une commande .....

Salut zaphir,

Pour utiliser la ligne de commande plutôt que le script, regarde find :
http://debian-facile.org/commande:find
C'est le mieux dans ta situation en association avec la commande sed, là :
http://debian-facile.org/doc:systeme:sed

Fait quelques essais et tests avant que de vouloir les appliquer pour de vrai.

Amitié, Joel smile

"Définition d'eric besson : S'il fallait en chier des tonnes pour devenir ministre, il aurait 2 trous du cul." - JP Douillon
"L'utopie ne signifie pas l'irréalisable, mais l'irréalisée." - T Monod (source :  La zone de Siné)
"Je peux rire de tout mais pas avec n'importe qui." - P Desproges
"saque eud dun" (patois chtimi : fonce dedans)

Hors ligne

#3 04-07-2011 11:12:49

Dohri
Membre
Lieu : /home/dohri/canapé
Distrib. : Sid
Noyau : 3.10.1 amd64
Inscription : 19-12-2010
Site Web

Re : Un petit coup de main pour une commande .....

je connaissais pas sed, c'est vraiment intéressant comme truc!!!:)

Asus Zenbook ux32vd > Sid   |   eeepc 1215 > Sid + gnome  |   eeepc 1015 > Squeeze + gnome   |   sony vaio > Squeeze CLI   |   serveur home made > debian squeeze CLI

Hors ligne

#4 04-07-2011 12:16:00

enicar
Membre
Lieu : Grenoble
Distrib. : debian/sid
Noyau : Linux 4.8.10
(G)UI : openbox
Inscription : 26-08-2010

Re : Un petit coup de main pour une commande .....

Bonjour,

Après lecture très (trop) rapide de la page du wiki concernant sed, je trouve qu'il manque
une commande de sed essentielle pour faire la transformation que recherche zaphir.
La commande n pour next qui permet d'afficher la ligne courante (sauf si sed est invoqué avec l'option  -n ) , puis de passer à la suivante.

La commande cherchée serait du style :

 sed -i -e '/^[0-9]/n' -e 'y/<from>/<to>/' <fichier>


où :
<from> : le caractère que l'on veut remplacer
<to> : le caractère de remplacement
<fichier> : le fichier à traiter

Décryptons tout cela :
option -i :           permets d'éditer le fichier sur place
option -e :          dit à sed d'exécuter la commande qui suit
/^[0-9]/n :         demande à sed d'afficher toutes les lignes qui commencent
                         par un numéro et de passer à la suivante.
y/<from>/<to>/ : substition de tous les caractères <from> par <to> pour la ligne
                        courante. Comme on ne substitue qu'un seul caractère par un autre,
                        on pourrait utiliser s/<from>/<to>/g à la place

Ainsi si la ligne commence par un numéro, on l'écrit et on passe à la suivante, sinon
on fait la substitution puis on l'écrit.

Note: la commande y/<from>/<to>/ de sed permets de convertir chaque caractère de la chaîne <from> par un caractère de la chaine <to>, de tel façon que le premier caractère
de la chaîne <from> sera remplacé par le premier caractère de la chaîne <to>, le second caractère de <from> sera remplacé par le second caractère de <to>, et ainsi de suite.


La machine, c'est dépassé ! On va tout remplacer par des humains big_smile

Hors ligne

#5 04-07-2011 17:52:46

enicar
Membre
Lieu : Grenoble
Distrib. : debian/sid
Noyau : Linux 4.8.10
(G)UI : openbox
Inscription : 26-08-2010

Re : Un petit coup de main pour une commande .....

Re,

Une documentation sur sed qui mérite d'être lu :
   http://www.commentcamarche.net/faq/sed-478

C'est assez volumineux, mais dans leur document il donnent des exemples d'utilisation  de l'opérateur de  négation qui sont très intéressantes.

À la lumière de ces exemples la commande cherchée pourrait s'écrire :

 sed -i '/^[0-9]/!y/<from>/<to>/' <fichier>


Voilà je pense qu'après ce micro-aperçu de sed, il reste encore beaucoup à
découvrir...

Dernière modification par enicar (04-07-2011 17:54:14)


La machine, c'est dépassé ! On va tout remplacer par des humains big_smile

Hors ligne

Pied de page des forums