[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: sed remplacement de "=" par espace



salut Benoît,

je prend le train en marche un peu tard et je sais pas si tu es
arrivé à tes fins mais:

On Sun, Mar 16, 2025 at 12:52:47PM +0100, Benoît Barbier wrote:

Il y a plusieurs problèmes dans cette ligne

> sed "s/[""'’`;:,.=]/ /g"

* quand tu utilises "", tu permets l'expansion hors le symbole `
  permet d'executer une commande:

	echo "hello `hostname`"

pour éviter ça, il faut utiliser la simple quote:

	echo 'hello `hostname`'

dans ton cas en plus:

* la backquote n'est pas fermée
* même si tu la fermes, ce n'est pas une expression valide

	echo "hello `hostname"

un autre problème: écrire "A""B" revient à écrire AB et donc ton
script ne trouvera jamais les ""

du coup: comment introduire un ' dans une chaine protégée par des '?
, en faisant 3 chaines:

	echo 'A'"'"'B'  # 'A' puis "'" puis 'B'
	echo 'A'\''B'  # 'A' puis \' puis 'B'

si c'est pas assez lisible/maintenable pour toi, passe par une variable
intermédiaire:

Q=\' # simple quote
echo 'A'$Q'B'

	sed 's/["'\''’`;:,.=]/ /g'

autre option: tu gardes les double quotes et tu protèges les 3 symboles
problèmatiques ( ', " et ` )

	sed "s/[\"\'\`’;:,.=]/ /g"


> > https://www.gnu.org/software/bash/manual/bash.html#Quoting

bash et sa doc ont ça en commun d'être inutilement grosse par rapport à
la concurrence. je te conseille de regarder la section quoting du man
dash.

> Si non le terminal (zsh) me fait un :

> dquote>
> au lieux de considérer que c'est correctement fermé.

c'est parce que ' ne peut être fermé que quand tu auras fermé ` ce qui
n'est pas le cas dans ton exemple.

puisque tu mentionnes zsh, tu peux aussi utiliser l'option rcquotes qui
permet de quoter comme avec le shell rc (qui remplaçait sh dans la
dernière version d'unix et qui est le shell par defaut dans plan9):

pour avoir une chaine protégée par des quotes avec une quote dedans, tu
doubles la quote dans le texte. donc tu peux écrire

	setopt rcquotes
	sed 's/["''`’;:,.=]/ /g'

a+

-- 
Marc Chantreux


Reply to: