Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

sed

5 réponses
Avatar
andre_debian
Bonjour,

D=E9sol=E9, un tantinet HS.

Dans un fichier texte, je souhaite retirer cette expression :
class=3D\"fma\"
(remplac=E9e par vide).

Je tente ceci :
sed -i "s/class=3D\"fma\"//g" fichier

Pas de message d'erreur, mais l'expression reste pr=E9sente.

Merci d'une aide.

Andr=E9

5 réponses

Avatar
Steve Fouchet
Salut,
Il faut échapper le caractère "" et les guillemets, ou les remplacer
par des simples.
sed -i 's/class="fma"//g' fichier
++
Le 14/06/2017 à 14:20, a écrit :
sed -i "s/class="fma"//g" fichier
Avatar
Daniel Caillibaud
Le 14/06/17 à 14:29, Steve Fouchet a écrit :
SF> Salut,
SF>
SF> Il faut échapper le caractère "" et les guillemets, ou les r emplacer
SF> par des simples.
C'est plus prudent de toujours mettre des simples dans une expression sed ( sinon le shell
interprète l'expression avant de la passer à sed, et ça peut faire des trucs gênant, surtout
avec -i, si y'a du $ ou du ! dedans).
SF> sed -i 's/class="fma"//g' fichier
sed -i -e 's/class="fma"//g' fichier
me parait plus lisible
(le -e semble pas obligatoire avec -i mais j'ai l'habitude de toujours le m ettre, souvent -re
d'ailleurs, pour éviter la tonne de à mettre sur les () ou les quantificateurs, ou -nre)
--
Daniel
Certains hommes n'ont que ce qu'ils méritent,
les autres sont célibataires.
Sacha Guitry
Avatar
Francois Lafont
Hello
On 06/15/2017 11:32 AM, Daniel Caillibaud wrote:
SF> sed -i 's/class="fma"//g' fichier
sed -i -e 's/class="fma"//g' fichier
me parait plus lisible

C'est plus lisible mais ça ne fait pas la même chose et ça ne résout plus
le problème du PO. ;)
--
François Lafont
Avatar
Francois Lafont
Hello,
On 06/19/2017 10:05 AM, Daniel Caillibaud wrote:
???
Un truc m'échappe, tu peux détailler la différence de résultat entre les deux ?

Pas de souci. Bon... toutes mes excuses par avance si c'est
moi qui ai mal compris au final. ;)
Sauf erreur donc, le PO il voulait remplacer ça (chaîne brute
où le n'a pas de signification spéciale) :
class="fma"
par du vide.
La proposition de Steve Fouchet fait le job :
~$ printf '...[%s]...n' 'class="fma"' | sed 's/class="fma"//g'
...[]...
Ta proposition ne fonctionne pas car les ne sont pas pris
en compte :
~$ printf '...[%s]...n' 'class="fma"' | sed 's/class="fma"//g'
...[class="fma"]...
Par ailleurs, quand bien même il y a eu méprise sur la demande
initiale du PO, tu indiquais dans ton message que ta proposition
de sed était « plus lisible » que celle de Steeve, ce qui
sous-entendait implicitement qu'elle restait équivalente (que
c'était juste une amélioration de lisibilité). Force est de
constater que les deux sed ne sont pas équivalents.
--
François Lafont
Avatar
Daniel Caillibaud
Le 19/06/17 à 11:17, Francois Lafont a écr it :
FL> Hello,
FL>
FL> On 06/19/2017 10:05 AM, Daniel Caillibaud wrote:
FL>
FL> > ???
FL> > Un truc m'échappe, tu peux détailler la différence de résultat entre les deux ?
FL>
FL> Pas de souci. Bon... toutes mes excuses par avance si c'est
FL> moi qui ai mal compris au final. ;)
FL>
FL> Sauf erreur donc, le PO il voulait remplacer ça (chaîne brute
FL> où le n'a pas de signification spéciale) :
PO ?
FL> class="fma"
FL>
FL> par du vide.
Dans ce cas c'est moi qui ai mal compris, je pensais qu'il échappait l e guillemet et voulais
remplacer toutes les chaînes `class="fma"` (et aussi par habitude du html, class= étant suivi
normalement d'un guillement), et ensuite j'ai lu un peu vite et pensais que le double
échappement était là à cause des doubles quotes mais re venait à un échappement du guillemet dans
l'expression à virer (alors que c'était bien l'échappement d e qui était voulu).
Bref, j'avais rien compris et ma réponse était à coté d u pb.
--
Daniel
Mieux vaut préter à sourire que donner a refléchir.