Problème d'alias
dna.factory
Messages postés
25996
Date d'inscription
Statut
Modérateur
Dernière intervention
-
dubcek Messages postés 18789 Date d'inscription Statut Contributeur Dernière intervention -
dubcek Messages postés 18789 Date d'inscription Statut Contributeur Dernière intervention -
Bonjour,
Je travaille sur un script sh, et fatalement, je me retrouve régulièrement avec les même séries de commandes.
J'ai donc décidé d'utiliser les alias.
En particulier j'en utilise 2
un Query = "psql -U compte|head -n-2|tail -n+3"
qui fonctionne très bien (j'ai fait le shopt expand)
Par contre, je voudrais utiliser un Unxml, et là je bloque.
La commande que je veux aliaser est la suivante :
awk -F">" '{print $2}'|awk -F"<" 'print $1'
Quand j'utilise cette commande dans le corps du script, elle fonctionne bien.
Problème, à cause des apostrophes, je peux pas faire de
alias Unxml="awk -F">" '{print $2}'|awk -F"<" 'print $1'"
'{print }': No such file or directory
j'ai essaye d'utiliser des apostrophes simples pour le -F
pas d'erreur, mais pas d'execution non plus
J'ai essayé de virer complètement les apostrophes :
awk: option -F lacks argument
J'ai essayé d'échapper les apostrophes avec des \
Pas d'erreur, mais pas d'execution non plus.
Je connais pas les codes à mettre à la places des apostrophes ou des ><, maintenant, je sais pas si ça marcherait vraiment...
en soit, grâce au copier coller, c'est pas la mort (ça fait un an que j'ai le problème), mais cette commande est utilisées une 20aines de fois, donc pour la lisibilité et la légèreté, c'est toujours bon à prendre
Je travaille sur un script sh, et fatalement, je me retrouve régulièrement avec les même séries de commandes.
J'ai donc décidé d'utiliser les alias.
En particulier j'en utilise 2
un Query = "psql -U compte|head -n-2|tail -n+3"
qui fonctionne très bien (j'ai fait le shopt expand)
Par contre, je voudrais utiliser un Unxml, et là je bloque.
La commande que je veux aliaser est la suivante :
awk -F">" '{print $2}'|awk -F"<" 'print $1'
Quand j'utilise cette commande dans le corps du script, elle fonctionne bien.
Problème, à cause des apostrophes, je peux pas faire de
alias Unxml="awk -F">" '{print $2}'|awk -F"<" 'print $1'"
'{print }': No such file or directory
j'ai essaye d'utiliser des apostrophes simples pour le -F
pas d'erreur, mais pas d'execution non plus
J'ai essayé de virer complètement les apostrophes :
awk: option -F lacks argument
J'ai essayé d'échapper les apostrophes avec des \
Pas d'erreur, mais pas d'execution non plus.
Je connais pas les codes à mettre à la places des apostrophes ou des ><, maintenant, je sais pas si ça marcherait vraiment...
en soit, grâce au copier coller, c'est pas la mort (ça fait un an que j'ai le problème), mais cette commande est utilisées une 20aines de fois, donc pour la lisibilité et la légèreté, c'est toujours bon à prendre
A voir également:
- Pierre a créé un raccourci (alias ou lien) du fichier sommaire sur son bureau. quel est le numéro de l'icône correspondant à ce raccourci ?
- Créer un lien pour partager des photos - Guide
- Fichier bin - Guide
- Creer un raccourci clavier - Guide
- Raccourci retourner écran - Guide
- Comment réduire la taille d'un fichier - Guide
2 réponses
Salut,
awk -F">" '{print $2}'|awk -F"<" 'print $1'Et d'un apparemment il n'y a pas de source d'entrée (fichier) pour le 1er awk et dans le 2ème il manquerait les accolades, non ? ;-\
Avec les fonctions
le résultat est celui souhaité.
Je suis pas sur que ça sera aussi simple à utiliser qu'un alias, mais c'est déjà ça de pris.
UnXml()
{
echo $1 |awk -F ">" '{print $2}'|awk -F "<" '{print $1}'
}
UnXml `cat chemin/fichier.xml|grep Field` > /tmp/test.dna
cat /tmp/test.dna
le résultat est celui souhaité.
Je suis pas sur que ça sera aussi simple à utiliser qu'un alias, mais c'est déjà ça de pris.
Il me reste un petit soucis (rien d'insurmontable, on est dans l'ordre du cosmétique/réduction de code).
si je retourne directement mon résultat, pas de soucis pour utiliser la fonction,
par contre, si je veux le stocker dans une mémoire, j'y arrive pas vraiment
La méthode qui fonctionne :
Est quand même mieux que l'absence de fonction, mais ça me force à rajouter une ligne.
j'ai essayé, le
mais 'bizarrement', ça n'a mas marché
j'ai essayé avec des parenthèses
J'ai une erreur (substitution)
et des accolades
j'ai pas d'erreur, mais aucun affichage.
(idem pour apostrophes et guillemets, pas d'erreur, mais pas de retour)
si je retourne directement mon résultat, pas de soucis pour utiliser la fonction,
par contre, si je veux le stocker dans une mémoire, j'y arrive pas vraiment
La méthode qui fonctionne :
test2=`cat /chemin/fichier|grep Field`
test2=`UnXml $test2`
Est quand même mieux que l'absence de fonction, mais ça me force à rajouter une ligne.
j'ai essayé, le
test3=`UnXml `cat /chemin/fichier|grep Field``
mais 'bizarrement', ça n'a mas marché
j'ai essayé avec des parenthèses
`UnXml (commande)`
J'ai une erreur (substitution)
et des accolades
`UnXml { commande }`
j'ai pas d'erreur, mais aucun affichage.
(idem pour apostrophes et guillemets, pas d'erreur, mais pas de retour)
F "[<>]"
J'ai bien compris ?
On peut mettre de la regex dans le -F ?
je savais qu'on pouvait mettre des chaines, mais j'avais pas pensé au regex...
C'est über puissant :)
(dans certains cas, je faisait du sed avant le awk pour remplacer certains caractères par d'autres et avoir un seul séparateur, finalement, j'avais pas besoin...)
J'ai bien compris ?
On peut mettre de la regex dans le -F ?
je savais qu'on pouvait mettre des chaines, mais j'avais pas pensé au regex...
C'est über puissant :)
(dans certains cas, je faisait du sed avant le awk pour remplacer certains caractères par d'autres et avoir un seul séparateur, finalement, j'avais pas besoin...)
oui, FS peut-être regex ou chaine de car.
http://www.gnu.org/software/gawk/manual/gawk.html#Field-Separators
http://www.gnu.org/software/gawk/manual/gawk.html#Field-Separators
pour le manque de fichier source, c'est fait exprès, c'est le principe de l'alias.
une fois défini mon alias de la façon suivante
alias Unxml="awk -F">" '{print $2}'|awk -F"<" '{print $1}'"
en résumé :
grep Number fichier.xml (ou cat fichier.xml |grep Number)
<exportNumber>90</exportNumber>
grep Number fichier.xml|awk -F ">" '{print $2}'|awk -F "<" '{print $1}'
90
(y'a peut-être plus intelligent pour déparser, voir même avec des outils tout prêt, mais bon, ça marche et c'est moi qui l'ai fait :)).
J'aurais donc voulu pouvoir faire
grep Number fichier.xml|Unxml
Je l'ai fait avec le Query comme indique plus haut, et ça fonctionne, donc le principe est valable
alias Query = "psql -U compte|head -n-2|tail -n+3"
echo "requete"|Query
Essaie comme ça :
juste pour être sur que c'est pas une histoire d'espace, voila ce que j'avais tappé :
pas d'erreur, mais ça ne marche pas.
j'ai terminé ma journée, c'est noyel...
je reprendrais le dossier vendredi.
Après, comme je dit, c'est pas bloquant
Alors essaie de créer une fonction plutôt qu'un alias...