[Shell] : string contenue dans une autre
Résolu
Thorfin
-
Thorfin -
Thorfin -
Bonjour,
Je cherche à déterminer si une chaîne de caractères est contenue dans une autre.
J'ai fait le script suivant :
#!/bin/bash
chaine1='Mystring'
chaine2='My'
if [[ "$chaine1" == *"$chaine2"* ]]
then
echo "It's there!";
fi
Ce petit programme a l'air de fonctionner MAIS je souhaiterai y faire appel de la façon suivante :
/home/program.sh home/file1 home/file2 home/file3
"file1" est un fichier contenant uniquement "Mystring"
"file2" est un fichier contenant uniquement "My"
et "file3" est le fichier dans lequel écrire "It's there!"
Comment faire pour lire les chaînes de caractères des fichiers, effectuer le test et renvoyer la réponse dans un fichier ?
Toute aide est la bienvenue
P.S. : je suis débutant en shell, je ne maîtrise absolument pas ce langage.
Je cherche à déterminer si une chaîne de caractères est contenue dans une autre.
J'ai fait le script suivant :
#!/bin/bash
chaine1='Mystring'
chaine2='My'
if [[ "$chaine1" == *"$chaine2"* ]]
then
echo "It's there!";
fi
Ce petit programme a l'air de fonctionner MAIS je souhaiterai y faire appel de la façon suivante :
/home/program.sh home/file1 home/file2 home/file3
"file1" est un fichier contenant uniquement "Mystring"
"file2" est un fichier contenant uniquement "My"
et "file3" est le fichier dans lequel écrire "It's there!"
Comment faire pour lire les chaînes de caractères des fichiers, effectuer le test et renvoyer la réponse dans un fichier ?
Toute aide est la bienvenue
P.S. : je suis débutant en shell, je ne maîtrise absolument pas ce langage.
A voir également:
- [Shell] : string contenue dans une autre
- Classic shell - Télécharger - Personnalisation
- Secure shell - Télécharger - Divers Web & Internet
- Shell infrastructure host c'est quoi - Guide
- Shell startup windows 10 - Guide
- Shell do while ✓ - Forum Shell
2 réponses
$ ls file1 file2 foo.sh* $ cat file1 Mystring $ cat file2 My $ cat foo.sh #!/bin/bash grep -q -f $2 $1 if [[ $? = 0 ]] then echo "It's there!" > $3 fi $ ./foo.sh file1 file2 file3 $ ls file1 file2 file3 foo.sh* $ cat file3 It's there! $
;-))
En fait je travaille en radiothérapie et on utilise un logiciel de planification de traitement (Pinnacle) permettant d'automatiser pas mal d'étape à l'aide de script (le code est propre au logiciel et basé sur du c++). Je voudrais détruire un objet si son nom contient les caractères "eq" mais c'est impossible à faire avec le code du logiciel. Il faut donc que j'envoie les actions à effectuer dans un terminal, que j'effectue les opérations en shell et que je récupère le résultat dans le script Pinnacle. Je sais envoyer les deux chaînes de caractères d'intérêt dans deux fichiers distincts (ou dans un mais ça à l'air plus compliqué à exploiter ?!) et je sais lire le fichier dans lequel sera stocké le résultat. Mais entre ces deux opération, tout ce qui est du shell, je ne vois pas comment m'en sortir ...
(je ne sais pas si je suis très clair, je peux détailler certains points si ça peut aider)
(je ne sais pas si je suis très clair, je peux détailler certains points si ça peut aider)
File1 contient : Mystring
File2 contient : My
File3 contient : 0 !!!!
Par contre j'ai modifié légèrement le script foo.sh pour rajouter un else :
#!bin/bash
grep -q -f $2 $1
if [[ $? = 0 ]]
then
echo "1" > $3
else
echo "0" > $3
fi
:-))
il me retourne :
grep: illegal option -- q
grep: illegal option -- f
Usage: grep -hblcnsviw pattern file . . .
Alors qu'initialement on a les mêmes fichiers ! le nom diffère, en fait, j'envoie très exactement la commande :
./contains.sh Temporary_string_83724.Script Temporary_stringSearch_83724.Script Temporary_stringSearchResult_83724.Script
Il ne s'agit pas d'un problème de version bash, bourne, c ? (je m'y connais pas du tout)