Flux rss
Rechercher : dans
Par : Pertinence Date Nom d'utilisateur
Statut : Résolu

Bash - sed Remplacer / par \/

Acedia, le mercredi 12 mars 2008 à 16:18:00
Bonjour,


Je cherche à remplacer avec Sed dans une expression de la forme /*/* par une expression de la forme \/*\/*

En gros, je récupère une information dans une variable, que j'insère dans un fichier temporaire afin de travailler sur la chaîne de caractère.
Je veux récupérer cette chaîne modifiée dans une variable pour ensuite l'insérer dans un autre fichier, avec Sed. C'est pourquoi je ne peux laisser les / tels quels, parce qu'ils sont interprétés, et je voudrais qu'ils ne le soient pas.


Je schématise:

saisie >> variable >> fichier temporaire pour travailler sur la chaîne >> variable >> Sed


En fait je me dis qu'il est peut être possible de directement travailler sur la variable mais je ne sais pas comment faire.

Je précise que mon script est en BASH.

Merci d'avance!
Configuration: Firefox 2.0.0.12
Répondre à Acedia  Signaler ce message aux modérateurs Aller au dernier message

1


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
jipicy, le mercredi 12 mars 2008 à 16:44:32
Salut,

Voir dans la FAQ Sed - Introduction à SED - Part II - Les délimiteurs
Sed - Introduction à SED - Part II - Le remplacement de variables

;-))
Z'@+...che.
JP : Zen, my Nuggets ! ;-)
Le savoir n'est bon que s'il est partagé.
Répondre à jipicy

2


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
Acedia, le mercredi 12 mars 2008 à 17:50:48
Oui merci j'ai résolu ce problème, mais j'en ai un autre maintenant.


Je veux substituer une ligne entière par une expression.

J'ai utilisé cette syntaxe:

sed "/numero_ligne/c mon_expression" fichier.txt

Il me retourne: \ attendu après `a' `c' ou `i'



J'ai essayé des tas de choses, sans succès, je n'arrive vraiment pas à m'en dépatouiller...

Si vous avez des suggestions..
Répondre à Acedia

3


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
jipicy, le mercredi 12 mars 2008 à 17:54:54
sed "/numero_ligne/c\mon_expression" fichier.txt 
et si c'est un numéro de ligne, pas besoin de l'encadrer par des délimiteurs :
sed "numero_ligne c\mon_expression" fichier.txt 
;-))

Z'@+...che.
JP : Zen, my Nuggets ! ;-)
Le savoir n'est bon que s'il est partagé.
Répondre à jipicy

4


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
Acedia, le mercredi 12 mars 2008 à 19:58:51
Réside un dernier problème: j'ai une variable derrière le \

Du coup, le " saute:

sed ""$linenum" c\"$sline" ~/fstab


En mettant un espace, ce n'est pas mieux... simple quote ne change rien non plus...

De plus, lorsque je met:

sed ""$linenum" c\ "$sline" ~/fstab

il m'affiche à l'écran le contenu de $sline, avec un espace devant, mais ne l'écris pas dans le fichier. C'est bizarre, il n'y a aucune concaténation avec cat ou autre...
Répondre à Acedia

5


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
Acedia, le mercredi 12 mars 2008 à 21:04:43
J'ai trouvé tout seul finalement.


Je vous met la solution, si ça peut aider quelqu'un:

sed -i ''$linenum' c\ '$line'' ~/fstab #on laisse un espace après \ pour qu'il ne nous échappe pas '
sed -i 's/^ //' ~/fstab #on supprime le premier espace de la ligne.

Note: nécessite que ce soit la première ligne avec un espace au début, ou que ce soit la seule.
Répondre à Acedia

6


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
jipicy, le jeudi 13 mars 2008 à 16:26:15
Le plus simple restait quand même les doubles quotes :
sed "$linenum c\ $sline" ~/fstab
sed -i 's/^ //' ~/fstab #on supprime le premier espace de la ligne.

Note: nécessite que ce soit la première ligne avec un espace au début, ou que ce soit la seule.

Non non, ce sera appliqué à toutes les lignes commençant par un espace.

Z'@+...che.
JP : Zen, my Nuggets ! ;-)
Le savoir n'est bon que s'il est partagé.
Répondre à jipicy

7


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
Acedia, le jeudi 13 mars 2008 à 17:27:05
Ben non, avec ton expression il inscrit un espace aussi.
En plus je ne suis pas sûr que le shell apprécie que l'on ne quote pas les variables dans l'expression sed. Je n'ai pas testé sans, mais je crois que c'est une convention non?

sed -i 's/^ //' ~/fstab #on supprime le premier espace de la ligne.

Note: nécessite que ce soit la première ligne avec un espace au début, ou que ce soit la seule.
Non non, ce sera appliqué à toutes les lignes commençant par un espace.


Tu as raison, autant pour moi.
Répondre à Acedia

8


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
jipicy, le jeudi 13 mars 2008 à 17:30:31
sed "$num c\
$var"
Essaie comme ça alors ;-))

Z'@+...che.
JP : Zen, my Nuggets ! ;-)
Le savoir n'est bon que s'il est partagé.
Répondre à jipicy

9


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
 Acedia, le jeudi 13 mars 2008 à 17:46:38
Ah ça je n'y avais pas pensé, pas bête, mais ne t'inquiète pas, j'ai terminé mon script, il fonctionne très bien avec la suppression de l'espace , en plus c'est parfait parce qu'il ne faut pas qu'il y ait d'espace dans ce fichier en début de ligne.


Merci pour tes réponses en tout cas ;)
Répondre à Acedia
J'ai vraiment du mal avec sed.... (Résolu)rebonjour, je voudrait avec sed remplacer if_lt r4.x, c0.b par IF LT.x sachant que x peut etre dautre lettre donc par exemple si savais if_lt r4.z, c0.b ce soit remplacé par IF LT.z au mieux j'aimerais que sed me trouve les "if_", recupere les... www.commentcamarche.net/forum/affich-3609413-j-ai-vraiment-du-mal-avec-sed
[shell] sed, remplacer toutes les occurences (Résolu)Salut a tous, Je n'arrive pas a remplacer toutes les occurences d'une chaine par une autre. Par exemple, je voudrais remplacer tous les a par des o dans santiago. J'ai ecrit un script avec sed qui marche mais qui ne remplace que la... www.commentcamarche.net/forum/affich-6878059-shell-sed-remplacer-toutes-les-occurences
[bash linux] remplacer une ligne (Résolu)salut a tous, je voudrais ecrire une ligne de commande qui remplace une ligne par une autre dans un fichier. Il s'agit du fichier /etc/proftpd/proftpd.conf Et je voudrais remplacer la ligne UseIPv6 on par la ligne UseIPv6 off Comme on est pas sur... www.commentcamarche.net/forum/affich-6605024-bash-linux-remplacer-une-ligne
Sed - Introduction à SED - Part IIISED - The Stream EDitor - Part III Ce document est une introduction à la pratique et à l'utilisation de l'éditeur de flux "SED", qui essaie de couvrir certaines fonctionnalités assez méconnues, pour ne pas dire "quasi inconnues", qui font de "SED"... www.commentcamarche.net/faq/sujet-9558-sed-introduction-a-sed-part-iii
Sed - Trucs et astucesTrucs et astuces en vrac Substitution Affichage Suppression Espace et tabulation Ligne vide Intervalle régulier Divers Substitution Substituer "foo" par "bar" à chaque ligne Seulement la 1ère occurrence sed 's/foo/bar/' Seulement... www.commentcamarche.net/faq/sujet-6699-sed-trucs-et-astuces
Sed - Conversion retours chariots DOS (CRLF) / UNIX (LF)Conversion format de fichier DOS UNIX / UNIX DOS Préambule Ce qu'il faut savoir Conversion DOS vers UNIX Conversion UNIX vers DOS Préambule Il existe déjà des utilitaires (dos2unix et unix2dos) qui s'acquittent très bien ce cette... www.commentcamarche.net/faq/sujet-5978-sed-conversion-retours-chariots-dos-crlf-unix-lf
Remplacer avec sed (Résolu)Bonjour, Je souhaiterai remplacer les champs des lignes qui commence par un espace par des "0" et qu'il s'arréte dés qu'il trouve un caractére autre qu'un espace. J'ai tenté des trucs mais ça ne marche pas: sed -e 's/... www.commentcamarche.net/forum/affich-4566566-remplacer-avec-sed
[Vim] Remplacer une occurence ? (Résolu)Bonjour, Je connais la commande de base dans Vim pour remplacer une occurence par une autre: :%s/old/new/g mais comment faire pour que celà s'applique à tous les fichiers ouvert ? Est ce possible ? Merci www.commentcamarche.net/forum/affich-3858331-vim-remplacer-une-occurence
Remplacer chaîne de caractères ds un fichier (Résolu)Bonjour Quel est la commande Unix pour remplacer une chaîne de caractère par une autre dans la première ligne d'un fichier ( et uniquement dans la première) ? Merci pour votre aide Greg www.commentcamarche.net/forum/affich-3152968-remplacer-chaine-de-caracteres-ds-un-fichier
Crash BashCertificat ELSPA: ,Date de relâchement :01/12/00,Distributeur:Sony,Genre:Divers,L'année de fabrique:  www.commentcamarche.net/guide-achat/crash-bash-83031-fiche-technique
Toutes les réponses pour « Bash sed Remplacer / par \/ »