#1 Le 02/08/2013, à 11:01
- MrFaelivrin
[RESOLU] Le retour des expressions régulières avec awk!
Bonjour tout le monde, belle journée?
Toujours des erreurs et cette fois-ci avec la création d'un dossier "---".
Je vous expose mes tests effectués, l'objectif est simplement de renommer tous les dossiers "---" en "autres". (Etant donné que dans mes scripts ça met un grand bazar.)
j'ai suivi vos conseils précédemment en mettant "--" pour indiquer la fin des options avec:
mkdir -- "---"
Sauf que j'ai par la suite tout pleins d'autres problèmes avec ce dossier, je me suis simplement facilité la tache en modifiant toutes ces chaînes spéciales!
Je crée un simple fichier:
test.txt:
---
------
Ma commande awk:
awk '{ chaine=$0; gsub(/\-\-\-/,"autres",chaine); print $0;}' "./test.txt" > ./resultats.txt
cat resultats.txt
Dans resultats, il n'y a eu aucune modification, pourquoi? :s
Merci pour toute l'aide qui pourra m'être offerte.
(je m'y prends de bonne heure, je suis à la fin de mon projet, je veux le terminer avant ce soir. ahaahahahah, je suis ambitieux! )
EDIT: j'ai même essayé cette REGEXP: /---/
Mais "-" est un méta-caractère étant donné qu'il est utilisé dans les "classes d'équivalences". [0-9]
Dernière modification par MrFaelivrin (Le 02/08/2013, à 11:25)
Hors ligne
#2 Le 02/08/2013, à 11:24
- MrFaelivrin
Re : [RESOLU] Le retour des expressions régulières avec awk!
Désolé pour ce post!!
En examinant ma ligne je me suis aperçu d'une chose...
J'ai laissé print $0 alors que c'est la valeur de la variable "chaine" à afficher!
Hors ligne
#3 Le 02/08/2013, à 11:28
- credenhill
Re : [RESOLU] Le retour des expressions régulières avec awk!
hello
ou aussi
awk --posix '{ chaine=$0; gsub("-{3}","autres",chaine); print chaine;}'
Hors ligne
#4 Le 02/08/2013, à 11:30
- pingouinux
Re : [RESOLU] Le retour des expressions régulières avec awk!
Ta commande marche parfaitement, et pouvait même être simplifiée :
$ awk '{ gsub(/---/,"autres"); print;}' "./test.txt" > ./resultats.txt
$ cat resultats.txt
autres
autresautres
Hors ligne
#5 Le 02/08/2013, à 14:16
- MrFaelivrin
Re : [RESOLU] Le retour des expressions régulières avec awk!
Intéressant!
J'adore quand on partage ses points de vue sur les commandes en shell!
Comment les raccourcir(les simplifier) et donc les rendre plus élégantes!
La programmation c'est tout un art!
Bon pour mon projet c'est vraiment pas gagné! ^^
Là je viens de constater que des dossiers comme "Police & Aventure" posaient des problèmes dans les recherches...
Dans mes commandes du genre:
awk -v research="${research}" -v subcategory="${subcategory}" -v category="${category}" -F "\t" '$2==research && $5==category && $6==subcategory && $8!="pasdelivre.php" { print $8;}' "$workfile" | sort -u > ./0000_liste_url_prc.txt
subcategory ca peut être un truc du genre: "Police & Aventure"
Et je pense que le caractère & pose problème..
Mais si j'échappe juste avant le "&" avec un sed type:
subcategory=$(echo ${subcategory} | sed s/'&'/'\&'/g;);
awk -v research="${research}" -v subcategory="${subcategory}" -v category="${category}" -F "\t" '$2==research && $5==category && $6==subcategory && $8!="pasdelivre.php" { print $8;}' "$workfile" | sort -u > ./0000_liste_url_prc.txt
Cela ne va pas plus fonctionner, je le crains.
En fait je parviens à récupérer les auteurs mais pas les livres... je creuse je creuse je creuse....
C'est très capricieux le shell! Mais qu'est-ce que c'est pratique et tellement puissant quand tu maîtrises!
Dernière modification par MrFaelivrin (Le 02/08/2013, à 14:18)
Hors ligne
#6 Le 02/08/2013, à 15:18
- pingouinux
Re : [RESOLU] Le retour des expressions régulières avec awk!
Ta commande awk en #5 a l'air correcte, et ne pose aucun problème avec "Police & Aventure" .
Donne éventuellement un exemple (simplifié) et le message d'erreur.
Ajouté : Les champs de ton fichier "$workfile" sont-ils bien séparés par des tabulations ?
Dernière modification par pingouinux (Le 02/08/2013, à 15:20)
Hors ligne
#7 Le 02/08/2013, à 15:47
- MrFaelivrin
Re : [RESOLU] Le retour des expressions régulières avec awk!
En fait j'ai pensé que mes erreurs venaient de ce genre de dossier parce que je ne pouvais pas accéder au dossier.
Mais en regardant le déroulement de mon script j'observe:
cd: can't cd to Dumas, Alexandre
J'ai pas la moindre idée en fait du pourquoi je ne peux pas accéder à certains dossiers. :'(
J'ai l'impression de devenir fou. ^^
Je tourne en rond.. je tourne en rond.
La virgule? L'espace?? Je n'en sais plus rien.
Dernière modification par MrFaelivrin (Le 02/08/2013, à 15:52)
Hors ligne
#8 Le 02/08/2013, à 15:56
- pingouinux
Re : [RESOLU] Le retour des expressions régulières avec awk!
Il faudrait voir le script qui génère cette erreur. D'après le message, ce ne devrait être ni un répertoire inexistant, ni un manque de permission sur ce répertoire.
Ajouté : Ou alors, tu es en sh et non en bash
Dernière modification par pingouinux (Le 02/08/2013, à 16:08)
Hors ligne
#9 Le 02/08/2013, à 15:57
- Postmortem
Re : [RESOLU] Le retour des expressions régulières avec awk!
Salut,
Pour info, pour remplacer un & par \& avec sed, il faut faire ainsi :
echo 'Police & Aventure' | sed 's/&/\\&/g'
Si tu mets un seul \, tu auras simplement & dans le remplacement.
Si tu ne mets pas de \ devant le &, le & sera remplacé par le texte correspondant à l'expression régulière renseigné dans la 1ère partie du sed :
$ echo 'Police & Aventure' | sed 's/.*/& ## & ## &/'
Police & Aventure ## Police & Aventure ## Police & Aventure
Sinon, sans utiliser sed :
$ echo "${subcategory}"
Police & Aventure
$ subcategory="${subcategory/&/\&}"
$ echo "${subcategory}"
Police \& Aventure
Sinon, pour ton problème avec "Alexandre Dumas", faudrait que tu montres ton code ainsi que d'où vient et comment tu extraits ce "Dumas, Alexandre".
Mot' a dit : « Un Hellfest sans Slayer, c'est comme une galette-saucisse sans saucisse ! »
Hors ligne
#10 Le 02/08/2013, à 15:59
- MrFaelivrin
Re : [RESOLU] Le retour des expressions régulières avec awk!
../ajout.sh: 12: cd: can't cd to Conan, Laure
l12 de ajout.sh:
foldername=$1;
#On entre dans le dossier de l'auteur.
#foldername=$(echo ${foldername} | sed s/', '/'\,\ '/g;)
cd "${foldername}";
Dernière modification par MrFaelivrin (Le 02/08/2013, à 23:06)
Hors ligne
#11 Le 02/08/2013, à 16:06
- pingouinux
Re : [RESOLU] Le retour des expressions régulières avec awk!
research="$1";
foldername="$1";
Hors ligne
#12 Le 02/08/2013, à 23:08
- MrFaelivrin
Re : [RESOLU] Le retour des expressions régulières avec awk!
J'aurais du supprimer ce doublon. Je m'en sers en fait pour distinguer le dossier de la recherche effectuee.
Dernière modification par MrFaelivrin (Le 02/08/2013, à 23:09)
Hors ligne