Bash - sed Remplacer / par \/

Résolu/Fermé
Signaler
Messages postés
6
Date d'inscription
mercredi 12 mars 2008
Statut
Membre
Dernière intervention
13 mars 2008
-
Messages postés
6
Date d'inscription
mercredi 12 mars 2008
Statut
Membre
Dernière intervention
13 mars 2008
-
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!

4 réponses

Messages postés
40805
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
10 août 2020
4 900
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 
;-))
1
Messages postés
6
Date d'inscription
mercredi 12 mars 2008
Statut
Membre
Dernière intervention
13 mars 2008

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...
0
Messages postés
6
Date d'inscription
mercredi 12 mars 2008
Statut
Membre
Dernière intervention
13 mars 2008
>
Messages postés
6
Date d'inscription
mercredi 12 mars 2008
Statut
Membre
Dernière intervention
13 mars 2008

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.
0
Messages postés
40805
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
10 août 2020
4 900
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.
1
Messages postés
6
Date d'inscription
mercredi 12 mars 2008
Statut
Membre
Dernière intervention
13 mars 2008

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.
0
Messages postés
40805
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
10 août 2020
4 900
sed "$num c\
$var"
Essaie comme ça alors ;-))
1
Messages postés
6
Date d'inscription
mercredi 12 mars 2008
Statut
Membre
Dernière intervention
13 mars 2008

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 ;)
0
Messages postés
40805
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
10 août 2020
4 900
0
Messages postés
6
Date d'inscription
mercredi 12 mars 2008
Statut
Membre
Dernière intervention
13 mars 2008

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..
0