Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1659 connectés 

  FORUM HardWare.fr
  Linux et OS Alternatifs
  Codes et scripts

  BASH remplacer une chaine par une autre en suivant un motif.

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

BASH remplacer une chaine par une autre en suivant un motif.

n°893633
tuton01
Posté le 08-03-2007 à 19:40:21  profilanswer
 

Bonjour,
C'est un peu plus compliqué que dans le titre en fait, je souhaiterais faire des remplacements un peu genre sscanf de C il me semble.
Je m'explique si on considère la chaîne suivante
                              ...
                              #Coucou# LE texte que je veux garder #
                              ...
Je souhaite remplacer #coucou# par une fonction genre "fonction(" et remplacer le dernier  # par ). Tout en conservant le milieu.
Ca c'est facile en deux étapes...  
 
Oui mais en fait, le dernier # ne doit pas forcement être remplacé par une parenthèse fermée.
Ce qui serait bien donc c'est une fonction en bash qui fait ceci:
                               je reconnais:                     #Coucou# quelque chose #
                               je le remplace par:            fonction(quelque chose)
Elle accepterait trois  paramètres dans l'idéal:
                                         "fichier"                     => fichier à traiter
                                         "#coucou#%s#"      => motif à rechercher
                                         "fonction(%s)"           => chaîne de remplacement.
 
Ensuite je fait la fonction pour toutes les possibilités (peut nombreuse) de #type#quelque chose#.
 
C'est en fait une sorte de conversion de langage balisé que je souhaite faire.
Il y a peu être un moyen avec sed mais je vois pas comment...
 
Je sais pas si je suis très clair mais bon...
Si quelqu'un a déjà eu ce genre d'idée... :)  
merci d'avance

mood
Publicité
Posté le 08-03-2007 à 19:40:21  profilanswer
 

n°893841
black_lord
Modérateur
Truth speaks from peacefulness
Posté le 09-03-2007 à 13:37:11  profilanswer
 

man tr


---------------
uptime is for lousy system administrators what Viagra is for impotent people - mes unixeries - github me
n°893955
tuton01
Posté le 09-03-2007 à 20:40:11  profilanswer
 

tr c'est pour des caractère il me semble... pas pour des chaînes de caractères..

n°894680
domos
Posté le 13-03-2007 à 13:04:40  profilanswer
 

tuton01 a écrit :

tr c'est pour des caractère il me semble... pas pour des chaînes de caractères..


 
Voir avec la commande SED:
avec quelques exemples perso:
 
Syntaxe sed pour remplacer une chaine de caractere dans un fichier.
Ici recherche la ligne commencant par "#m1" et la remplace par "m1":

sed s/^#m1/m1/ inittab


Et inversement:

sed s/^m1/#m1/ inittab.server


 
Remplace la valeur chaine derrière IPADDR= par la valeur de la variable $IP et renvoi dans le fichier d'origine.

sed "s/\(IPADDR=\).*$/\1$IP/" /root/ifcfg-eth0.bak > /etc/sysconfig/network-scripts/ifcfg-eth0


Supprime toutes les lignes contenant "local3.info" du fichier test

sed /local3.info/d test


 
Conversion fichier assembleur TASM (windows) en fichier TPASM (linux).
 
include nomfichier ou .include nomfichier => include "nomfichier"
#define ROUTINE => ROUTINE equ 1
#ifdef => ifdef
#endif => endif
label equ Px.y => label equ Px_y
 

sed 's/^[ ]*#define[ ]*\(.*\)$/\1 equ 1/' $tasm_file | \
sed 's/^[ .]*include[ ]*\(.*\)$/ include "\1"/' | \
sed 's/#ifdef/ifdef/' | \
sed 's/#endif/endif/' | \
sed 's/^\(.*\)\.\([0-9].*\)$/\1_\2/' > $tpasm_file

n°896808
tuton01
Posté le 21-03-2007 à 21:34:50  profilanswer
 

Je vais essayer d'apprendre mieux à me servir de Sed.. On verra si j'y arrive avec.
Merci en tout cas.

n°896831
tuton01
Posté le 21-03-2007 à 22:17:34  profilanswer
 

Génialissime Sed !! Merci pour les exemples..


Message édité par tuton01 le 21-03-2007 à 22:17:55
n°896883
wedgeant
Da penguin inside
Posté le 22-03-2007 à 08:54:02  profilanswer
 

Ou sinon, tu peux aussi faire ça avec perl, la syntax est sensiblement la même que sed, mais je trouve que c'est plus simple à utiliser :)


---------------
Wedge#2487 @HS -#- PW: +∞ -#- Khaz-Modan/Boltiz @WoW

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Linux et OS Alternatifs
  Codes et scripts

  BASH remplacer une chaine par une autre en suivant un motif.

 

Sujets relatifs
remplacement variable script bash[Bash] Le C(r|)on et les scripts
Bash] Boucle while - export variable[BASH] Ajouter extension via feedback de commande file
[BASH] question sur un bout de script(BASH) Découper $path en plusieurs variables (debutant)
Extraire les mails de la file d'exim pour un utilisateur donnéScript bash qui marche à moitié
BASH : ajouter des lignes en début de fichierSH/BASH Petite question avec des -param
Plus de sujets relatifs à : BASH remplacer une chaine par une autre en suivant un motif.


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR