BASH remplacer une chaine par une autre en suivant un motif. - Codes et scripts - Linux et OS Alternatifs
Marsh Posté le 09-03-2007 à 13:37:11
man tr
Marsh Posté le 09-03-2007 à 20:40:11
tr c'est pour des caractère il me semble... pas pour des chaînes de caractères..
Marsh Posté le 13-03-2007 à 13:04:40
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 | \ |
Marsh Posté le 21-03-2007 à 21:34:50
Je vais essayer d'apprendre mieux à me servir de Sed.. On verra si j'y arrive avec.
Merci en tout cas.
Marsh Posté le 21-03-2007 à 22:17:34
Génialissime Sed !! Merci pour les exemples..
Marsh Posté le 22-03-2007 à 08:54:02
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
Marsh Posté le 08-03-2007 à 19:40:21
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