Couper une chaine de caractere [Résolu/Fermé]

Signaler
Messages postés
7
Date d'inscription
jeudi 6 novembre 2008
Statut
Membre
Dernière intervention
8 novembre 2008
-
Messages postés
7
Date d'inscription
jeudi 6 novembre 2008
Statut
Membre
Dernière intervention
8 novembre 2008
-
Bonjour,
je cherche a couper une chaine de caractère dans un script sh, j'ai essayé d'utiliser la commande cut mais le problème c'est que cette commande ne permet que d'utiliser des caractère comme délimiteur alors que dans mon exemple je voudrai utiliser une chaine de caractère.est-ce que quelqu'un connait une commande ou une option de cut pour résoudre mon problème?
je vous explique par un exemple:


List="machin bidule truc"


je voudrais récupérer premièrement tout ce qui se trouve avant "bidule" puis tout ce qui se trouve après "bidule".
j'avais alors essayé la commande :


av=`echo List | cut -d "bidule" -f1`
ap=`echo List | cut -d "bidule" -f2`

mais l'option -d nécessite un caractère comme délimiteur merci d'avance pour vos réponse.

8 réponses

Messages postés
40805
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
10 août 2020
4 770
Salut,
[tmpfs]$ List="machin bidule truc"

[tmpfs]$ echo ${List#* }
bidule truc

[tmpfs]$ echo ${List% *}
machin bidule

[tmpfs]$ echo ${List##* }
truc

[tmpfs]$ echo ${List%% *}
machin

[tmpfs]$
;-))
Messages postés
150
Date d'inscription
mercredi 29 octobre 2008
Statut
Membre
Dernière intervention
25 novembre 2013
19
Il y a des centaines de façons...

en voici une si ta chaine est petite et s'il y a toujours des espaces entre les mots :

set `echo "machin bidule truc"`

Tu fais attention avant echo et à la fin ce sont des accents inversés <AltGr> 7

# echo $1
machin

# echo $2
bidule

# echo $3
truc

et dans $* tu as :
# echo $*
machin bidule truc

Enfin dans $# le nombre de mots :
# echo $#
3
Messages postés
40805
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
10 août 2020
4 770
set machin bidule truc
suffit amplement, le echo ne sert à rien ;-))
Messages postés
7
Date d'inscription
jeudi 6 novembre 2008
Statut
Membre
Dernière intervention
8 novembre 2008

merci pour les réponses mais je voudrai une méthode qui fonctionne quelque soit le nombre de mots dans la liste et quelque soit la chaine de caractère
exemple
List="un deux trois quatre cinq"

je voudrai pouvoir éxècuter cette méthode quelque soit la chaine de caractère qui sert de délimiteur.
je pourrai par exemple prendre pour délimiteur "trois" ou " deux " ou "deux trois quatre" ou "s qua" ...


j'en ai besoin pour remplacer une partie de la chaine List par une autre chaine de caractère.
je voudrai par exemple obtenir avec List les chaine "un deux truc quatre cinq" ou "un bidule cinq"...
Messages postés
150
Date d'inscription
mercredi 29 octobre 2008
Statut
Membre
Dernière intervention
25 novembre 2013
19
Oui c'est pour le cas où il a sa chaine dans une variable...

# TOTO="machin bidule truc"

# set `echo $TOTO`

# echo $1
machin


A moins qu'il y ait là aussi une autre solution ....
Messages postés
40805
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
10 août 2020
4 770
Ben là aussi "set $TOTO" suffit ;-))
Messages postés
150
Date d'inscription
mercredi 29 octobre 2008
Statut
Membre
Dernière intervention
25 novembre 2013
19
ah ! ben là tu vois celle-là je l'apprends !!
çà fait 20 ans que je me tords le neurone avec mes côte inverses

MERCI
Messages postés
40805
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
10 août 2020
4 770
Ben ça fait un moment aussi que les quotes inverses ont été remplacées par $(commande) ;-))
Messages postés
150
Date d'inscription
mercredi 29 octobre 2008
Statut
Membre
Dernière intervention
25 novembre 2013
19
Oui entre temps j'ai eu une interruption...
J'ai besoin d'une bonne remise à niveau
:)))
Messages postés
40805
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
10 août 2020
4 770
Ah bin ça malheureusement c'est pas automatique ;-((

;-))
Messages postés
7
Date d'inscription
jeudi 6 novembre 2008
Statut
Membre
Dernière intervention
8 novembre 2008

en fait mon problème reviens a substituer une sous chaine situé a l'intérieur d'une chaine de caractère par une autre chaine de caractère sans savoir ni combien de mots il y a dans ma chaine ni la place ou je veux effectuer la substitution

exemple
List="une chaine de caractère"
je voudrai pouvoir obtenir "une chaine 2 caractère" par exemple
Messages postés
40805
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
10 août 2020
4 770 >
Messages postés
7
Date d'inscription
jeudi 6 novembre 2008
Statut
Membre
Dernière intervention
8 novembre 2008

[tmpfs]$ List="une chaine de caractère"

[tmpfs]$ echo $List
une chaine de caractère

[tmpfs]$ echo $List | sed 's/de/2/'
une chaine 2 caractère

[tmpfs]$ 
Mais je doute que ce soit le résultat escompté ;-(
Messages postés
150
Date d'inscription
mercredi 29 octobre 2008
Statut
Membre
Dernière intervention
25 novembre 2013
19
Dommage, mais çà viendra...
J'ai vu que des neurobiologistes stockaient des informations du cerveau sur clé USB

:)
Messages postés
150
Date d'inscription
mercredi 29 octobre 2008
Statut
Membre
Dernière intervention
25 novembre 2013
19
Là je laisse la place au spécialiste,
Tu es entre bonnes mains avec jipicy
Messages postés
40805
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
10 août 2020
4 770
Faudrait-il encore que je comprenne la demande et toutes ses subtilités ;-((

Honnêtement là je sèche, il faudrait un exemple plus probant ;(\
Messages postés
7
Date d'inscription
jeudi 6 novembre 2008
Statut
Membre
Dernière intervention
8 novembre 2008
>
Messages postés
40805
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
10 août 2020

en faite plus globalement mon but est d'ajouter une chaine de caractère STRING dans une liste de caractère déjà triée LIST(c'est une partie d'un projet il mets donc interdit d'utiliser une commande de tri quelconque).

exemple
LIST="bidule machin truc"
et je veux introduire le mot MOT="chaine"
"machin" est le premier mot aphabetiquement supérieur a "chaine" je doit donc l'introduire avant "machin".
je cherche a recuperer AV(ici="bidule ") et AP(ici=" truc")
pour obtenir une nouvelle Liste LIST2="$AV $MOT "machin" $AP"
pour obtenir la liste LIST2="bidule chaine machin truc"

désolé si cet exemple ne simplifie pas les choses
Messages postés
150
Date d'inscription
mercredi 29 octobre 2008
Statut
Membre
Dernière intervention
25 novembre 2013
19
J'avais pas VU !

Oui tel que c'est présenté çà va au delà de l'analyse syntaxique et grammaticale ...
tu peux être plus explicite jukun62
Messages postés
7
Date d'inscription
jeudi 6 novembre 2008
Statut
Membre
Dernière intervention
8 novembre 2008

merci je n'avais pas pensé a la commande sed
vous pensez que l'exemple suivant serait correct?

LIST="bidule machin truc"

MOT="chaine"
MOT2="machin"
LIST2=echo $LIST | sed 's/$MOT2/$MOT $MOT2/'
Messages postés
7
Date d'inscription
jeudi 6 novembre 2008
Statut
Membre
Dernière intervention
8 novembre 2008
>
Messages postés
7
Date d'inscription
jeudi 6 novembre 2008
Statut
Membre
Dernière intervention
8 novembre 2008

par correct je veux dire que LIST2="bidule chaine machin truc"
Messages postés
40805
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
10 août 2020
4 770 >
Messages postés
7
Date d'inscription
jeudi 6 novembre 2008
Statut
Membre
Dernière intervention
8 novembre 2008

[tmpfs]$ LIST="bidule machin truc"
[tmpfs]$ echo $LIST
bidule machin truc
[tmpfs]$ MOT="chaine"
[tmpfs]$ MOT2="machin"
[tmpfs]$ LIST2=$(sed "s/$MOT2/$MOT &/" <<<$LIST)
[tmpfs]$ echo $LIST2
bidule chaine machin truc
[tmpfs]$  
Messages postés
150
Date d'inscription
mercredi 29 octobre 2008
Statut
Membre
Dernière intervention
25 novembre 2013
19 >
Messages postés
40805
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
10 août 2020

MERCI,
C'est quand même la moindre des choses !!!
;-)
Messages postés
7
Date d'inscription
jeudi 6 novembre 2008
Statut
Membre
Dernière intervention
8 novembre 2008
>
Messages postés
150
Date d'inscription
mercredi 29 octobre 2008
Statut
Membre
Dernière intervention
25 novembre 2013

c'est vrai que j'ai oublié,
merci a tous ceux qui ont pris le temps de me répondre et merci de m'avoir permis de résoudre mon probleme.
:-)