|
Publicité ' | |||||||||||||||||||||||
|
|
#1 |
|
Membre régulier
![]() Inscription : mars 2007 Messages : 78 ![]() |
Bonjour,
Je n'arrive pas extraire une sous-chaîne en une seule commande. Mais avant de me résigner a le faire en plusieurs étape, je vous expose mon pb au cas ou ... alors dans ma variable j'ai la chaîne suivante je voudrais extraire juste la chaîne "MA_TABLE" Or le mot "Table" peut être écrit en majuscule minuscule .... la "(" peut être collé ou non a ma chaîne et évidement il peut y avoir des retours à la ligne entre les mots. un truc simple en somme ;-) bon si vous avec une solution en "3" lignes je prend aussi Merci |
|
|
10
|
|
|
#2 | |
|
Expert Confirmé Sénior
![]() Frédéric Ingénieur développement logiciels Inscription : février 2006 Messages : 3 055 ![]() |
Citation:
Code bash :
nomTable=`echo "$toto" |cut -f3 -d' ' |sed -e "s/(//"` Là ça devient un poil plus compliqué. Et en plus suis pas chez-moi donc je peux pas tester mais laisse moi qq minutes et je reviendrai donner une solution
__________________
Vous ne pouvez pas apporter la prospérité au pauvre en la retirant au riche. Tout ce qu'un individu reçoit sans rien faire pour l'obtenir, un autre individu a dû travailler pour le produire sans en tirer profit. Tout Pouvoir ne peut distribuer aux uns que ce qu'il a préalablement confisqué à d'autres car on n'accroît pas les biens en les divisant. Quand la moitié d'un peuple croit qu'il ne sert à rien de faire des efforts car l'autre moitié les fera pour elle, et quand cette dernière moitié se dit qu'il ne sert à rien d'en faire car ils bénéficieront à d'autres, cela s'appelle le déclin et la fin d'une nation. Dr. Adrian Rogers, 1931 |
|
|
|
20
|
|
|
#3 |
|
Expert Confirmé Sénior
![]() Inscription : février 2008 Messages : 2 071 ![]() |
Bonjour,
là, parce que c'est du sh, je verrais bien un coup d'expr "$var" match "motif". regarde le page d'info |
|
|
20
|
|
|
#4 | |
|
Expert Confirmé Sénior
![]() Frédéric Ingénieur développement logiciels Inscription : février 2006 Messages : 3 055 ![]() |
Bon désolé pour les "qq minutes", j'ai complètement zappé une fois rentré chez-moi.
Sinon ben en fait la solution est toute simple même si c'est sur plusieurs lignes: Code bash :
nomTable=`echo $toto |cut -f3 -d' ' |sed -e "s/(//"` Citation:
![]() expr étant une commande externe, ça pourra s'utiliser que ce soit du sh, du csh, du ksh non ???
__________________
Vous ne pouvez pas apporter la prospérité au pauvre en la retirant au riche. Tout ce qu'un individu reçoit sans rien faire pour l'obtenir, un autre individu a dû travailler pour le produire sans en tirer profit. Tout Pouvoir ne peut distribuer aux uns que ce qu'il a préalablement confisqué à d'autres car on n'accroît pas les biens en les divisant. Quand la moitié d'un peuple croit qu'il ne sert à rien de faire des efforts car l'autre moitié les fera pour elle, et quand cette dernière moitié se dit qu'il ne sert à rien d'en faire car ils bénéficieront à d'autres, cela s'appelle le déclin et la fin d'une nation. Dr. Adrian Rogers, 1931 |
|
|
|
20
|
|
|
#5 |
|
Membre régulier
![]() Inscription : mars 2007 Messages : 78 ![]() |
Salut,
Tout d'abord merci à N_BaH et Sve@r pour vos réponses ![]() La solution du couple cut/sed marche bien quand la chaine est sur une seule ligne. Comme quoi les solutions les plus simples sont souvent les meilleurs Par contre quand j'ai des "retour chariot" à la ligne dans ma chaîne, ça ne fonctionne pas. Je vais quand même faire le test dans le script histoire d'être sur. Et je vous tiens au courant. Merci encore. |
|
|
10
|
|
|
#6 | |||
|
Expert Confirmé
![]() Inscription : janvier 2011 Messages : 970 ![]() |
Salut,
Citation:
Code :
__________________
$ man woman Il n'y a pas de page de manuel pour woman. |
|||
|
|
20
|
|
|
#7 | |||
|
Expert Confirmé Sénior
![]() francois Ingénieur systèmes et réseaux Inscription : juillet 2006 Messages : 3 538 ![]() |
Citation:
sed sait lire les chaines sur plusieurs lignes Code :
|
|||
|
|
10
|
|
|
#8 | |
|
Expert Confirmé Sénior
![]() Inscription : février 2008 Messages : 2 071 ![]() |
Citation:
Cependant, bash et ksh, avec les double-crochets et le tilde initiant la comparaison avec une regex, peuvent faire "en interne" ce que fait expr. zsh étant encore plus puissant propose peut-être un autre moyen. |
|
|
|
20
|
|
|
#9 |
|
Membre actif
![]() Inscription : août 2011 Messages : 44 ![]() |
Bonjour !
Code :
echo "CREATE TABLE\nMA_TABLE(\ntout le reste" | tr -s '\n' ' ' |{ IFS=' (' read create table nomTable autres; echo "${nomTable}" ; }
|
|
|
20
|
|
|
#10 |
|
Membre actif
![]() Inscription : août 2011 Messages : 44 ![]() |
un besoin pro me fait penser à ceci :
Code :
echo "CREATE\tTABLE\nMA_TABLE\r(\ntout le reste"|awk -v RS='' -F'[\n\r[:space:](]' ' { print $3}' |
|
|
11
|
|
|
#11 | |||
|
Expert Confirmé Sénior
![]() Frédéric Ingénieur développement logiciels Inscription : février 2006 Messages : 3 055 ![]() |
Citation:
C'est vrai que quand on a goûté aux shells plus évolués, on a du mal. Malheureusement t'es pas toujours libre de l'environnement ciblé...
__________________
Vous ne pouvez pas apporter la prospérité au pauvre en la retirant au riche. Tout ce qu'un individu reçoit sans rien faire pour l'obtenir, un autre individu a dû travailler pour le produire sans en tirer profit. Tout Pouvoir ne peut distribuer aux uns que ce qu'il a préalablement confisqué à d'autres car on n'accroît pas les biens en les divisant. Quand la moitié d'un peuple croit qu'il ne sert à rien de faire des efforts car l'autre moitié les fera pour elle, et quand cette dernière moitié se dit qu'il ne sert à rien d'en faire car ils bénéficieront à d'autres, cela s'appelle le déclin et la fin d'une nation. Dr. Adrian Rogers, 1931 |
|||
|
|
20
|
|
|
#12 | ||
|
Membre actif
![]() Inscription : août 2011 Messages : 44 ![]() |
Pas plus que sed à mon sens
![]() Citation:
![]() je "milite" également dans ce sens ...C'est d'ailleurs pour cela que ma première proposition était à base de read mais qui s'appuyait sur la sortie de trEt c'est ce qui justifie ma remarque car je le trouve sh "pauvrement" fourni Citation:
|
||
|
|
20
|
|
|
#13 |
|
Expert Confirmé Sénior
![]() Frédéric Ingénieur développement logiciels Inscription : février 2006 Messages : 3 055 ![]() |
Hum... un programme câblé pour comprendre tout un langage algorithmique complet contenant des structures alternatives et répétitives + possibilité de créer des fonctions me semble un poil plus lourd qu'un programme dont le but n'est que de faire des remplacements de texte et suppression de lignes. Parce que tout ce que awk peut faire ça a quand-même un certain poids...
__________________
Vous ne pouvez pas apporter la prospérité au pauvre en la retirant au riche. Tout ce qu'un individu reçoit sans rien faire pour l'obtenir, un autre individu a dû travailler pour le produire sans en tirer profit. Tout Pouvoir ne peut distribuer aux uns que ce qu'il a préalablement confisqué à d'autres car on n'accroît pas les biens en les divisant. Quand la moitié d'un peuple croit qu'il ne sert à rien de faire des efforts car l'autre moitié les fera pour elle, et quand cette dernière moitié se dit qu'il ne sert à rien d'en faire car ils bénéficieront à d'autres, cela s'appelle le déclin et la fin d'une nation. Dr. Adrian Rogers, 1931 |
|
|
00
|
|
|
#14 | ||
|
Membre actif
![]() Inscription : août 2011 Messages : 44 ![]() |
Oui, je suis d'accord avec toi... mais mesurer cette charge sur une seule action n'est vraiment pas significatif.
Sur de l'itération très volumineuse, j'y apporterai de l'importance.... Pour te donner raison : Code :
enfin bon, c'est un éternel débat |
||
|
|
00
|
|
|
#15 |
|
Membre régulier
![]() Inscription : mars 2007 Messages : 78 ![]() |
En tout cas merci a tous pour vos réponses
![]() Moi qui pensais que c’était une question bateau, j'ai bien fait de poser la question Merci encore @+ |
|
|
00
|
|
|
#16 | |
|
Expert Confirmé Sénior
![]() Frédéric Ingénieur développement logiciels Inscription : février 2006 Messages : 3 055 ![]() |
Citation:
__________________
Vous ne pouvez pas apporter la prospérité au pauvre en la retirant au riche. Tout ce qu'un individu reçoit sans rien faire pour l'obtenir, un autre individu a dû travailler pour le produire sans en tirer profit. Tout Pouvoir ne peut distribuer aux uns que ce qu'il a préalablement confisqué à d'autres car on n'accroît pas les biens en les divisant. Quand la moitié d'un peuple croit qu'il ne sert à rien de faire des efforts car l'autre moitié les fera pour elle, et quand cette dernière moitié se dit qu'il ne sert à rien d'en faire car ils bénéficieront à d'autres, cela s'appelle le déclin et la fin d'une nation. Dr. Adrian Rogers, 1931 |
|
|
|
00
|
Copyright © 2000-2012 - www.developpez.com