Couper une chaine de caractere

Résolu
jukun62 Messages postés 7 Date d'inscription   Statut Membre Dernière intervention   -  
jukun62 Messages postés 7 Date d'inscription   Statut Membre Dernière intervention   -
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.
A voir également:

8 réponses

jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 896
 
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]$
;-))
0
dmganges Messages postés 150 Date d'inscription   Statut Membre Dernière intervention   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
0
jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 896
 
set machin bidule truc
suffit amplement, le echo ne sert à rien ;-))
0
jukun62 Messages postés 7 Date d'inscription   Statut Membre Dernière intervention  
 
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"...
0
dmganges Messages postés 150 Date d'inscription   Statut Membre Dernière intervention   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 ....
0
jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 896
 
Ben là aussi "set $TOTO" suffit ;-))
0
dmganges Messages postés 150 Date d'inscription   Statut Membre Dernière intervention   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
0
jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 896
 
Ben ça fait un moment aussi que les quotes inverses ont été remplacées par $(commande) ;-))
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
dmganges Messages postés 150 Date d'inscription   Statut Membre Dernière intervention   19
 
Oui entre temps j'ai eu une interruption...
J'ai besoin d'une bonne remise à niveau
:)))
0
jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 896
 
Ah bin ça malheureusement c'est pas automatique ;-((

;-))
0
jukun62 Messages postés 7 Date d'inscription   Statut Membre Dernière intervention  
 
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
0
jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 896 > jukun62 Messages postés 7 Date d'inscription   Statut Membre Dernière intervention  
 
[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é ;-(
0
dmganges Messages postés 150 Date d'inscription   Statut Membre Dernière intervention   19
 
Dommage, mais çà viendra...
J'ai vu que des neurobiologistes stockaient des informations du cerveau sur clé USB

:)
0
dmganges Messages postés 150 Date d'inscription   Statut Membre Dernière intervention   19
 
Là je laisse la place au spécialiste,
Tu es entre bonnes mains avec jipicy
0
jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 896
 
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 ;(\
0
jukun62 Messages postés 7 Date d'inscription   Statut Membre Dernière intervention   > jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention  
 
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
0
dmganges Messages postés 150 Date d'inscription   Statut Membre Dernière intervention   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
0
jukun62 Messages postés 7 Date d'inscription   Statut Membre Dernière intervention  
 
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/'
0
jukun62 Messages postés 7 Date d'inscription   Statut Membre Dernière intervention   > jukun62 Messages postés 7 Date d'inscription   Statut Membre Dernière intervention  
 
par correct je veux dire que LIST2="bidule chaine machin truc"
0
jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 896 > jukun62 Messages postés 7 Date d'inscription   Statut Membre Dernière intervention  
 
[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]$  
0
dmganges Messages postés 150 Date d'inscription   Statut Membre Dernière intervention   19 > jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention  
 
MERCI,
C'est quand même la moindre des choses !!!
;-)
0
jukun62 Messages postés 7 Date d'inscription   Statut Membre Dernière intervention   > dmganges Messages postés 150 Date d'inscription   Statut Membre Dernière intervention  
 
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.
:-)
0