Bonjour,
sed "s/[""'’`;:,.=]/ /g
Pourquoi ça trouve pas les "=" ?
Est-ce qu'il y aurait plusieurs signe "=" dans l'UTF8 ?
sed "s/[""'’`;:,.=]/ /g
Pourquoi ça trouve pas les "=" ?
Est-ce qu'il y aurait plusieurs signe "=" dans l'UTF8 ?
N'a pas fonctionné avec la chaîne = "abcd-=-efgh" copiée-collée du terminal.
Le 16 mars 2025 Benoît Barbier a écrit :
sed "s/[""'’`;:,.=]/ /g
Pourquoi ça trouve pas les "=" ?
Est-ce qu'il y aurait plusieurs signe "=" dans l'UTF8 ?
N'a pas fonctionné avec la chaîne = "abcd-=-efgh" copiée-collée du terminal.
Si je copie tel que tes bouts de texte ça plante sed à cause des " et `
non protégés. De mon côté ça donne ça :
$ echo "abcd-=-efgh" | sed "s/[\"'\`:,.=]/ /g"
abcd- -efgh
Donne la commande exacte que tu passes et du résultat si tu as toujours
un problème avec =
Le problème est le traitement par le shell des arguments.
Peut-être que sed 's/[\"\'\`\’\`;:.=]/ /g' pourrait mieux convenir.
https://www.gnu.org/software/bash/manual/bash.html#Quoting
Le 16/03/25 à 11:55, Michel Verdier a écrit :
Le 16 mars 2025 Benoît Barbier a écrit :
sed "s/[""'’`;:,.=]/ /g
Ici j'ai mal copié collé ls '"' de fin, mais je l'utilisais dans mes tests
sed "s/[""'’`;:,.=]/ /g"
Pourquoi ça trouve pas les "=" ?
Est-ce qu'il y aurait plusieurs signe "=" dans l'UTF8 ?
N'a pas fonctionné avec la chaîne = "abcd-=-efgh" copiée-collée du terminal.
Si je copie tel que tes bouts de texte ça plante sed à cause des " et ` non protégés. De mon côté ça donne ça :
$ echo "abcd-=-efgh" | sed "s/[\"'\`:,.=]/ /g"
abcd- -efgh
Donne la commande exacte que tu passes et du résultat si tu as toujours
un problème avec =
J'ai du foirer un truc en ajoutant "="
J'ai utilisé la réponse de @Basile STARYNKEVITCH
Le problème est le traitement par le shell des arguments.
Peut-être que sed 's/[\"\'\`\’\`;:.=]/ /g' pourrait mieux convenir.
https://www.gnu.org/software/bash/manual/bash.html#Quoting
Mais je constate que je dois quand même mettre des " plutôt que des '
pour encadrer :
sed "s/[\"\'\`\’\`;:.=!#]/ /g"
Si non le terminal (zsh) me fait un :
dquote>
au lieux de considérer que c'est correctement fermé.
sed "s/[""'’`;:,.=]/ /g"
https://www.gnu.org/software/bash/manual/bash.html#Quoting
Si non le terminal (zsh) me fait un :
dquote>
au lieux de considérer que c'est correctement fermé.
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+
salut,
Un script qui convertit les noms de fichier ou de répertoire en camelCase >> après avoir enlevé les caractères spéciaux ou accentués.
Par exemple change :
– les "éèêÉÈÊ" en ‘e’ ;
– les "à ÀâÂ" en 'a'
– les "çÇ" en 'c'
– les "()" et "[]" en espace
– les ""'’`´;,:=!#" en espace
t'es pas en train de réécrire detox par hasard ? :)
Un script qui convertit les noms de fichier ou de répertoire en camelCase après avoir enlevé les caractères spéciaux ou accentués.
Par exemple change :
– les "éèêÉÈÊ" en ‘e’ ;
– les "à ÀâÂ" en 'a'
– les "çÇ" en 'c'
– les "()" et "[]" en espace
– les ""'’`´;,:=!#" en espace
t'es pas en train de réécrire detox par hasard ? :)Oups la boulette...
Trop tard, j'ai écris ce script pour rien ! :-(
Un script qui convertit les noms de fichier ou de répertoire en camelCase après avoir enlevé les caractères spéciaux ou accentués.
Par exemple change :
– les "éèêÉÈÊ" en ‘e’ ;
– les "à ÀâÂ" en 'a'
– les "çÇ" en 'c'
– les "()" et "[]" en espace
– les ""'’`´;,:=!#" en espace
c'est un truc à se retrouver avec plusieurs
fichiers qui ont le même nom...
Lz shell zsh est différent de GNU bash et a des règles de quotation différente.
La documentation à utiliser est donc différente.
https://zsh.sourceforge.io
Une autre solution serait d'écrire un programme C (ou Ocaml ou Rust) qui execute
/bin/sed comme une convient et de le compiler ou même qui fait le remplacement
espéré.
Je le laisse en exercice au lecteur. On pourait imaginer y utiliser https://man7.org/linux/man-pages/man3/regex.3.html https://man7.org/linux/man-pages/man7/regex.7.html
En C++ Qt offre aussi des possibilités nombreuses (et peut-être utilisé en dehors d'applications graphiques). https://www.qt.io/ et aussi http://www.fox-toolkit.org/
Je n'ai d'ailleurs pas compris le problème originel qui est à résoudre. De mon
point de vue manquent à la question le contexte du problème, a expliquer en plusieurs dizaines de phrases françaises.
Un grand merci pour ton aide.
j'éprouvais trop de difficultés à m'y retrouver dans la doc de bash.
Je ne suis pas sûr, mais ça semble fonctionner
Sysop: | Keyop |
---|---|
Location: | Huddersfield, West Yorkshire, UK |
Users: | 546 |
Nodes: | 16 (2 / 14) |
Uptime: | 147:59:26 |
Calls: | 10,383 |
Calls today: | 8 |
Files: | 14,054 |
D/L today: |
2 files (1,861K bytes) |
Messages: | 6,417,737 |