#1 Le 08/02/2022, à 19:39
- Curiosity33
[Résolut] Suppression de caractère avec sed
Bonjour,
Je fais un script pour supprimer le dernier espace avant le . de l'extension.
D'après mes tests sur regex101 l'expression ([\s])\.\w+$
mon fichier de test se nomme ok.maison .pd.maison .pdf
Le match est ok, mais il ne se passe rien si je l'exécute avec
echo $name | sed -E 's/([ ])\.\w\+$/\11/'
Une idée du problème ?
Dernière modification par Curiosity33 (Le 10/02/2022, à 20:07)
Hors ligne
#2 Le 08/02/2022, à 19:57
- diesel
Re : [Résolut] Suppression de caractère avec sed
Je peux te proposer :
echo -n ${name%" ".*} ; echo ${name##*" "}
Bon, il n'y a pas de sed et regex...
Amicalement.
Jean-Marie
Dernière modification par diesel (Le 08/02/2022, à 20:00)
Je déteste qu'on cherche à me faire passer pour un con, j'y arrive déjà très bien tout seul.
Le mort, il sait pas qu'il est mort ; c'est pour les autres que c'est dur.................... Pour les cons, c'est pareil.
Hors ligne
#3 Le 08/02/2022, à 20:00
- Watael
Re : [Résolut] Suppression de caractère avec sed
salut,
en bash, je n'utilise pas sed sur des variables :
$ v='foo bar .baz .ext'
$ echo "${v% .*}.${v##*.}"
foo bar .baz.ext
edit: ah !? grilled!
Dernière modification par Watael (Le 08/02/2022, à 20:01)
Connected \o/
Welcome to sHell. · eval is evil.
Hors ligne
#4 Le 08/02/2022, à 20:07
- diesel
Re : [Résolut] Suppression de caractère avec sed
Salut Watael,
On peut gagner un caractère :
$ v='foo bar .baz .ext'
$ echo "${v% .*}${v##* }"
foo bar .baz.ext
Amicalement.
Jean-Marie
Je déteste qu'on cherche à me faire passer pour un con, j'y arrive déjà très bien tout seul.
Le mort, il sait pas qu'il est mort ; c'est pour les autres que c'est dur.................... Pour les cons, c'est pareil.
Hors ligne
#5 Le 08/02/2022, à 20:08
- Curiosity33
Re : [Résolut] Suppression de caractère avec sed
Merci
Hors ligne
#6 Le 08/02/2022, à 20:11
- Curiosity33
Re : [Résolut] Suppression de caractère avec sed
Vous avez une doc pour approfondir ?
C'est la première fois que je vois la manipulation de variable dans ${ }
Dernière modification par Curiosity33 (Le 08/02/2022, à 20:11)
Hors ligne
#7 Le 08/02/2022, à 20:12
- diesel
Re : [Résolut] Suppression de caractère avec sed
man bash
Amicalement.
Jean-Marie
P.S. Après, tu fais une recherche gogol avec "manipulation de chaînes de caractères avec bash" et tu vas trouver ton bonheur.
Dernière modification par diesel (Le 08/02/2022, à 20:13)
Je déteste qu'on cherche à me faire passer pour un con, j'y arrive déjà très bien tout seul.
Le mort, il sait pas qu'il est mort ; c'est pour les autres que c'est dur.................... Pour les cons, c'est pareil.
Hors ligne
#8 Le 08/02/2022, à 20:58
- Watael
Re : [Résolut] Suppression de caractère avec sed
man bash
chercher la section "Remplacements de paramètres"
Connected \o/
Welcome to sHell. · eval is evil.
Hors ligne
#9 Le 09/02/2022, à 21:52
- Curiosity33
Re : [Résolut] Suppression de caractère avec sed
Finalement, je pense que sed reste la meilleure option. À moins qu'avec les remplacements de paramètres, je loupe une info.
Le bug, c'est que les documents ne sont pas tous de la forme
un fichier .pdf
J'ai aussi des fichiers qui sont bons
mon fichier.pdf
Ainsi si un fichier a la bonne forme. La commande
echo "${name% .*}${name##* }"
sort
mon fichier.pdffichier.pdf
J'ai pensé à faire une vérification de la dernière commande avec $? quand je fais ${name% .*}, mais je ne peux pas avoir de code d'exécution.
Pour éviter de faire un remplacement sur un fichier avec une bonne nomenclature. Je dois d'effectuer une analyse du nom avant et pour le faire je me retrouve avec sed.
Hors ligne
#10 Le 09/02/2022, à 22:04
- Watael
Re : [Résolut] Suppression de caractère avec sed
$ nomFichier='un fichier .pdf'
$ [[ $nomFichier == *\ .pdf ]] && nomFichier="${nomFichier% .*}${nomFichier##* }"; echo "$nomFichier"
un fichier.pdf
NB: les guillemets sont facultatifs entre crochets doubles.
Connected \o/
Welcome to sHell. · eval is evil.
Hors ligne
#11 Le 09/02/2022, à 22:22
- MicP
Re : [Résolut] Suppression de caractère avec sed
Bonjour
Vous avez une doc pour approfondir ? …
Tu pourras directement aller au paragraphe concerné dans les pages man de l'interpréteur de commandes bash
en entrant la ligne de commandes suivante :
man --pager='less -p "Remplacement des paramètres"' bash
Et si, comme moi tu as parfois du mal à comprendre certaines traductions approximatives,
tu pourras toujours lire la version originale (non traduite) :
LANG=C man --pager='less -p "Parameter Expansion"' bash
Dernière modification par MicP (Le 10/02/2022, à 14:30)
Hors ligne
#12 Le 10/02/2022, à 08:42
- diesel
Re : [Résolut] Suppression de caractère avec sed
Je peux te proposer l'extrait de script suivant qui marche quelle que soit l'extension (y compris si celle-ci contient elle-même des espaces ) :
$ nomFichier="mon fichier.a moi .quelquechose"
$ [[ ${nomFichier%.*} == *" " ]] && nomFichier=${nomFichier% .*}.${nomFichier##*.}
$ echo $nomFichier
$ mon fichier.a moi.quelquechose
$
$ nomFichier="mon fichier.a moi.quelquechose"
$ [[ ${nomFichier%.*} == *" " ]] && nomFichier=${nomFichier% .*}.${nomFichier##*.}
$ echo $nomFichier
$ mon fichier.a moi.quelquechose
$
$ nomFichier="mon fichier.a moi .quelque chose"
$ [[ ${nomFichier%.*} == *" " ]] && nomFichier=${nomFichier% .*}.${nomFichier##*.}
$ echo $nomFichier
$ mon fichier.a moi.quelque chose
Amicalement.
Jean-Marie
P.S. Je ne doute pas que Watael saura trouver plus simple et plus concis.
Dernière modification par diesel (Le 10/02/2022, à 09:42)
Je déteste qu'on cherche à me faire passer pour un con, j'y arrive déjà très bien tout seul.
Le mort, il sait pas qu'il est mort ; c'est pour les autres que c'est dur.................... Pour les cons, c'est pareil.
Hors ligne
#13 Le 10/02/2022, à 10:21
- Compte supprimé
Re : [Résolut] Suppression de caractère avec sed
Bonjour,
@diesel: ne marche pas si plusieurs espaces avant l'extention :
~ jt'écoute :nomFichier="mon fichier a moi .quelquechose"
~ jt'écoute :[[ ${nomFichier%.*} == *" " ]] && nomFichier=${nomFichier% .*}.${nomFichier##*.}
~ jt'écoute :echo $nomFichier
mon fichier a moi .quelquechose
~ jt'écoute :
#14 Le 10/02/2022, à 10:51
- pingouinux
Re : [Résolut] Suppression de caractère avec sed
Bonjour,
ne marche pas si plusieurs espaces avant l'extention
Il faut mettre des guillemets :
echo "$nomFichier"
Hors ligne
#15 Le 10/02/2022, à 10:54
- Compte supprimé
Re : [Résolut] Suppression de caractère avec sed
Faut le dire à l'intéressé, car moi j'ai dernièrement juré de toujours en mettre
#16 Le 10/02/2022, à 10:55
- diesel
Re : [Résolut] Suppression de caractère avec sed
Bonjour,
@diesel: ne marche pas si plusieurs espaces avant l'extention :~ jt'écoute :nomFichier="mon fichier a moi .quelquechose" ~ jt'écoute :[[ ${nomFichier%.*} == *" " ]] && nomFichier=${nomFichier% .*}.${nomFichier##*.} ~ jt'écoute :echo $nomFichier mon fichier a moi .quelquechose ~ jt'écoute :
Si. Il a supprimé UN espace avant le dernier point.
Maintenant, si la spec change et qu'il faut en supprimer plusieurs...
Amicalement.
Jean-Marie
Je déteste qu'on cherche à me faire passer pour un con, j'y arrive déjà très bien tout seul.
Le mort, il sait pas qu'il est mort ; c'est pour les autres que c'est dur.................... Pour les cons, c'est pareil.
Hors ligne
#17 Le 10/02/2022, à 11:00
- Compte supprimé
Re : [Résolut] Suppression de caractère avec sed
Pourquoi limiter son plaisir à un seul espace? ^^
Je te taquine^^
#18 Le 10/02/2022, à 11:02
- pingouinux
Re : [Résolut] Suppression de caractère avec sed
Si. Il a supprimé UN espace avant le dernier point.
En fait, le echo remplace une succession de blancs par une espace.
Hors ligne
#19 Le 10/02/2022, à 11:12
- diesel
Re : [Résolut] Suppression de caractère avec sed
diesel #16 a écrit :Si. Il a supprimé UN espace avant le dernier point.
En fait, le echo remplace une succession de blancs par une espace.
Exact.
Amicalement.
Jean-Marie
Je déteste qu'on cherche à me faire passer pour un con, j'y arrive déjà très bien tout seul.
Le mort, il sait pas qu'il est mort ; c'est pour les autres que c'est dur.................... Pour les cons, c'est pareil.
Hors ligne
#20 Le 10/02/2022, à 11:13
- diesel
Re : [Résolut] Suppression de caractère avec sed
Pourquoi limiter son plaisir à un seul espace? ^^
Je te taquine^^
J'avais bien compris.
Amicalement.
Jean-Marie
Je déteste qu'on cherche à me faire passer pour un con, j'y arrive déjà très bien tout seul.
Le mort, il sait pas qu'il est mort ; c'est pour les autres que c'est dur.................... Pour les cons, c'est pareil.
Hors ligne
#21 Le 10/02/2022, à 11:38
- Curiosity33
Re : [Résolut] Suppression de caractère avec sed
Merci beaucoup pour vos exemples. Je ne les avais pas vus hier et j'étais parti sur ça qui semble fonctionner.
Ce n'est pas le plus court, j'avoue
[[ $(expr "$name" : '.*[[:space:]]\..*$') -gt 0 ]] && fixedname=$(echo "${name%[[:space:]].*}${name##*[[:space:]]}") || fixedname="${name}"
Hors ligne
#22 Le 10/02/2022, à 15:32
- Compte supprimé
Re : [Résolut] Suppression de caractère avec sed
Pour le fun, une approche simple mais efficace avec python (parmi de nombreuses façons de faire).
Marche avec un nombre d'espaces illimités et quelle que soit l'extension:
>>> var = "patati patata truc .com"
>>> chemin, ext = var.split(".")
>>> var = ".".join((chemin.strip(), ext))
>>> print(var)
patati patata truc.com