[shell] respecter la casse d'une commande sed
Résolu
sdrogba
Messages postés
66
Date d'inscription
Statut
Membre
Dernière intervention
-
sdrogba Messages postés 66 Date d'inscription Statut Membre Dernière intervention -
sdrogba Messages postés 66 Date d'inscription Statut Membre Dernière intervention -
Bonjour,
Je suis débutant dans la programmation de shell (j'ai commencé ce matin) ^^
Bref je galère un peu j'aurais voulu savoir si vous auriez une solution à mon problème svp
voici tout d'abbord mon script actuel :
Vous serez d'accord avec moi ça marche mais ce n'est vraiment pas joli!!!
Comme vous l'aurez remarqué j'ai plusieurs façon possible de trouver "sortie" du coup je cherche comment faire pour que le script le trouve tout le temps.
De plus entre chaque logiquement il n'y a qu'un seul espace mais ce n'est pas forcément le cas.
Voilà j'ai beau regarder du coté des expressions régulières je ne trouve pas, si vous avez une idée je suis preneur.
Merci d'avance.
Je suis débutant dans la programmation de shell (j'ai commencé ce matin) ^^
Bref je galère un peu j'aurais voulu savoir si vous auriez une solution à mon problème svp
voici tout d'abbord mon script actuel :
#!/bin/bash for file in *.txt do echo "Traitement de $file ..." sed -i -e "s/WHENEVER ERROR CALL sortie/WHENEVER ERROR CALL prog_sortie/g" "$file" sed -i -e "s/WHENEVER ERROR CALL SORTIE/WHENEVER ERROR CALL prog_sortie/g" "$file" sed -i -e "s/WHENEVER ERROR CALL Sortie/WHENEVER ERROR CALL prog_sortie/g" "$file" done
Vous serez d'accord avec moi ça marche mais ce n'est vraiment pas joli!!!
Comme vous l'aurez remarqué j'ai plusieurs façon possible de trouver "sortie" du coup je cherche comment faire pour que le script le trouve tout le temps.
De plus entre chaque logiquement il n'y a qu'un seul espace mais ce n'est pas forcément le cas.
Voilà j'ai beau regarder du coté des expressions régulières je ne trouve pas, si vous avez une idée je suis preneur.
Merci d'avance.
A voir également:
- [shell] respecter la casse d'une commande sed
- Écran ordinateur cassé sans choc - Forum Ecran
- Lordi région écran cassé - Forum Ecran
- Ecran telephone cassé de l'interieur - Forum Wiko
- Écran pc portable cassé mettre second écran en écran primaire ✓ - Forum PC portable
- Apfs sensible à la casse - Guide
3 réponses
tout d'abord merci pour ta réponse.
Elle fonctionne à merveille au niveau de la casse, c'est magique par contre pour les espaces entre chaque mots cela ne fonctionne pas...
Enfin pourrait tu m'expliquer ce que
sed 's/\(WHENEVER ERROR CALL \)\(sortie\)/\1prog_\L\2/Ig'
veut dire exactement, enfin découpé pour que je comprenne stp
Elle fonctionne à merveille au niveau de la casse, c'est magique par contre pour les espaces entre chaque mots cela ne fonctionne pas...
Enfin pourrait tu m'expliquer ce que
sed 's/\(WHENEVER ERROR CALL \)\(sortie\)/\1prog_\L\2/Ig'
veut dire exactement, enfin découpé pour que je comprenne stp
par contre pour les espaces entre chaque mots cela ne fonctionne pas...
Euh... c'est à dire ? Dans ton exemple il n'y a rien concernant les espaces ;-\
Pour la syntaxe :
\(...\)
Permet de définir des sous-expressions. Chaque sous-expression étant référencée par la suite par son ordre d'apparition sur le ligne (9 au maximum).
Donc le "\1" correspond à /\(WHENEVER ERROR CALL \)
Et le \2 à \(sortie\)
I
En fin d'expression (juste avant le "g"), permet de traiter les motifs sans tenir compte de la casse.
\L
Permet de passer en minuscule tout ce qui se trouve après lui dans la partie droite de la substitution.
Donc comme c'est le "\2" (qui correspond à sortie) qui est derrière, sera passé en minuscule.
Voir la FAQ sur SED pour plus d'explications.
Euh... c'est à dire ? Dans ton exemple il n'y a rien concernant les espaces ;-\
Pour la syntaxe :
\(...\)
Permet de définir des sous-expressions. Chaque sous-expression étant référencée par la suite par son ordre d'apparition sur le ligne (9 au maximum).
Donc le "\1" correspond à /\(WHENEVER ERROR CALL \)
Et le \2 à \(sortie\)
I
En fin d'expression (juste avant le "g"), permet de traiter les motifs sans tenir compte de la casse.
\L
Permet de passer en minuscule tout ce qui se trouve après lui dans la partie droite de la substitution.
Donc comme c'est le "\2" (qui correspond à sortie) qui est derrière, sera passé en minuscule.
Voir la FAQ sur SED pour plus d'explications.
Ok merci pour ses explications.
Pour les espaces :
Normalement il n'y a qu'un espace entre chaque mot hélas il se peut qu'il y en ai plusieurs de temps en temps dans mes fichiers donc je voudrais faire en sorte que si il y a un espace entre chaque mot c'est cool mais si il y a deux espaces (voir plus) entre chaque mot qu'il remplace quand meme par un seul espace.
Pas facile a expliqué donc exemple
WHENEVER ERROR CALL SORTIE doit donné
WHENEVER ERROR CALL prog_sortie
Pour les espaces :
Normalement il n'y a qu'un espace entre chaque mot hélas il se peut qu'il y en ai plusieurs de temps en temps dans mes fichiers donc je voudrais faire en sorte que si il y a un espace entre chaque mot c'est cool mais si il y a deux espaces (voir plus) entre chaque mot qu'il remplace quand meme par un seul espace.
Pas facile a expliqué donc exemple
WHENEVER ERROR CALL SORTIE doit donné
WHENEVER ERROR CALL prog_sortie