Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#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! wink

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 smile

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

diesel a écrit :

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

Dans son message #6, Curiosity33 a écrit :

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 big_smile ) :

$ 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,

MPython Alaplancha #13 a écrit :

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 roll

#16 Le 10/02/2022, à 10:55

diesel

Re : [Résolut] Suppression de caractère avec sed

MPython Alaplancha a écrit :

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

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.

Hors ligne

#19 Le 10/02/2022, à 11:12

diesel

Re : [Résolut] Suppression de caractère avec sed

pingouinux a écrit :
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

MPython Alaplancha a écrit :

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 smile

[[ $(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