|script bash]aide commande unix

Fermé
Z-obaze Messages postés 34 Date d'inscription mardi 6 mars 2007 Statut Membre Dernière intervention 13 mars 2008 - 19 juin 2007 à 13:30
Z-obaze Messages postés 34 Date d'inscription mardi 6 mars 2007 Statut Membre Dernière intervention 13 mars 2008 - 27 juin 2007 à 13:07
salut tout le monde, j'aimerais avoir de l'aide concernant les commandes possibles sous Unix.

En gros, je fais une recherche dans un fichier avec grep et je voudrais afficher la première concordance qu'il trouve, ensuite afficher que la deuxième concordance etc...

et je voudrais savoir si c'est possible avec la commande grep et une boucle for ou si il y a plus simple en utilisant une autre commande.

Merci d'avance
A voir également:

25 réponses

jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 4 895
19 juin 2007 à 14:33
Salut,

Essaie comme ça :
#! /bin/bash

nb=0
while read ligne
do
(( nb = $nb + 1 ))
echo "Occurence n°$nb :" $ligne
done < <(grep  'PA Bay [0-9]* Information:' test.txt)
Sinon si tu veux garder la solution de FullVolant :
OLD_IFS=$IFS
IFS=$'\n'
nb=0
for ligne in `grep 'PA Bay [0-9]* Information:' test.txt`
do
(( nb = $nb + 1 ))
echo "Occurence n°$nb :" $ligne
done
IFS=$OLD_IFS
;-))
1
Bonjour,

La commande grep est très bien pour cela et avec un for, il ne devrait pas y avoir de soucis:
nb=0
for ligne in `grep toto /tmp/fic01.txt`
do
(( nb = $nb + 1 ))
echo "Occurence n°$nb :" $ ligne
done

Poste à nouveau si problème.
Bon scripting.
0
Z-obaze Messages postés 34 Date d'inscription mardi 6 mars 2007 Statut Membre Dernière intervention 13 mars 2008 1
19 juin 2007 à 14:20
merci de ta réponse mais j'ai encore un souci, voila ce que ce lame fait avec ton script :

nb=0
for ligne in `grep 'PA Bay [0-9]* Information:' test.txt`
do
(( nb = $nb + 1 ))
echo "Occurence n°$nb :" $ligne
done


et le truk c 'est que ça m'affiche une occurrence dès qu'il trouve PA ensuite Bay etc..., hors moi je veux k'il m'affiche "Occurence n°1 : " lorsqu'il trouve un ligne qui contient "PA Bay 0 Information" par exemple et ainsi de suite.
0
Z-obaze Messages postés 34 Date d'inscription mardi 6 mars 2007 Statut Membre Dernière intervention 13 mars 2008 1
19 juin 2007 à 14:39
je te remercie beaucoup de ta réponse jipicy car ça fonctionne très bien mais par contre je ne comprends les lignes que tu as rajouté au programme de fullvolant. Tu voudrais bien m'expliquer à quoi elle sert exactement?

je vous remercie mais je pense que j'aurai encore d'autre questions d'ici peu de temps.lol
0

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

Posez votre question
jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 4 895
19 juin 2007 à 14:48
Alors la variable pédéfinie du shell "IFS" (Input Field Separator) contient le caractère séparateur de champs en entrée qui par défaut est l'espace (ou tabulation).

Donc il suffit de changer ce séparateur de champs en fonction du format qu'on veut traiter en entrée.

Dans ton cas tu veux analyser des lignes, donc séparées par un saut de ligne (\n). Il suffit d'initialiser la variable $IFS avec la représentation du caractère de saut de ligne sous les systèmes UNIX, à savoir (\n)...

;-))
0
Z-obaze Messages postés 34 Date d'inscription mardi 6 mars 2007 Statut Membre Dernière intervention 13 mars 2008 1
19 juin 2007 à 15:38
bon, me revoila comme je l'avais dit.

et donc j'aimerais savoir si c'est possible et comment, lorsque l'on fait une recherche dans un fichier pour afficher le texte qui se trouve entre deux chaines de caractères.

Merci
0
jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 4 895
19 juin 2007 à 15:46
Re-

Il faudrait savoir si le texte à afficher se trouve sur la même ligne que les chaînes de caractères elles même ou non...
0
Z-obaze Messages postés 34 Date d'inscription mardi 6 mars 2007 Statut Membre Dernière intervention 13 mars 2008 1
19 juin 2007 à 15:53
ben non le texte n'est pas sur la mm ligne.

en gros on a :

chaines 1
...
....
....
....

chaines 2

et donc j'aimerais afficher ce qu'il y a entre les deux chaines 1 et 2
0
jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 4 895
19 juin 2007 à 16:17
sed -n '/chaîne1/,/chaîne2/p' fichier
;-))
0
Je te propose de parcourir toutes les lignes du fichier et d'utiliser des variables.
Initialisation de 2 variables à 0.
Lorsque tu rencontres chaine1, tu valorises la première variable à 1.
Lorsque tu rencontres chaine2, tu valorises la seconde variable à 1.
Tant que variable 1=1 et variable 2!=1, affichage des lignes du fichier.

Dans ce cas, la méthode de parcour du fichier de jipicy parait la plus appropriée:

var1=0
var2=0
while read ligne
do
if echo $ligne|grep "chaine1" > /dev/null
then
var1=1
fi
if echo $ligne|grep "chaine2" > /dev/null
then
var2=1
fi

if [ "$var1" == "0" ] && [ "$var2" == "0" ]
then
echo $ligne
fi

done < test.txt
0
Z-obaze Messages postés 34 Date d'inscription mardi 6 mars 2007 Statut Membre Dernière intervention 13 mars 2008 1
20 juin 2007 à 09:07
merki de vos réponses, mais fullvolant t'as solution ne renvoie rien a l'écran. je ne vois pas ce qui déconne..
0
Z-obaze Messages postés 34 Date d'inscription mardi 6 mars 2007 Statut Membre Dernière intervention 13 mars 2008 1
20 juin 2007 à 10:59
bon j'ai une autre petite question cette fois-ci concernant la commande if :

voici mon code :

i=0
nb=`grep -c 'Slot [0-9]*:' tests.txt`
if (( $i < $nb )) ;
then
echo "Slot $i:"
sed -n '/Slot '$i':/,/Boot log begin--/p' tests.txt > retest.txt
(( i = $i + 1 ))
echo $i
fi

et j'ai un prb, c'est que ce code n'execute qu'une seule fois l'instruction if, je voudrais que l'instruction if soit execute tant que i est inférieur a nb.

en espérant que quelqu'un pourra m'aider
0
jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 4 895
20 juin 2007 à 13:40
i=0
nb=$(grep -c 'Slot [0-9]*:' tests.txt)

while [ "$i" -lt "$nb" ]
do
echo "Slot $i:"
sed -n '/Slot '$i':/,/Boot log begin--/p' tests.txt > retest.txt
(( i = $i + 1 ))
echo $i
done
;-))
0
Z-obaze Messages postés 34 Date d'inscription mardi 6 mars 2007 Statut Membre Dernière intervention 13 mars 2008 1
20 juin 2007 à 17:05
je te remercie beaucoup jipicy, mais maintenant j'ai encore un autre problème, je voudrais tester si une variable contient quelque chose, donc j'ai essayé ça :

if [ -n $variable ];
then
...
fi

mai ça ne fonctionne pas, je comprends pas pourquoi
0
jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 4 895
20 juin 2007 à 17:26
Que te dire... affiche ton code et tes tests...
[jp@MDK tmpfs]$ A="Bonjour" ; echo $A

Bonjour

[jp@MDK tmpfs]$ if [ -n "$A" ] ; then echo "Ok" ; else echo "Variable vide :-(" ; fi

Ok

[jp@MDK tmpfs]$ unset A

[jp@MDK tmpfs]$ if [ -n "$A" ] ; then echo "Ok" ; else echo "Variable vide :-(" ; fi

Variable vide :-(

[jp@MDK tmpfs]$
;-))
0
Z-obaze Messages postés 34 Date d'inscription mardi 6 mars 2007 Statut Membre Dernière intervention 13 mars 2008 1
21 juin 2007 à 09:22
je te remercie de ton aide mais en fin de compte c'étai une faute toute bête, j'avais juste oublié de mettre les "" autour de la variable.

Merci
0
Z-obaze Messages postés 34 Date d'inscription mardi 6 mars 2007 Statut Membre Dernière intervention 13 mars 2008 1
21 juin 2007 à 10:16
bon me revoila une fois de plus, mais par contre la je ne suis pas sur que la question seras dans le bon forum.

Donc deja j'ai un programme bash ou il y a des variables et je voudrais savoir si il y a possiblités d'exporter ces variables dans un fichier php ou à partir du fichier php importer les variables qui sont dans le programme bash. Ce qui me permettra ensuite de les afficher notamment sur une page.

Merci d'avance
0
Z-obaze Messages postés 34 Date d'inscription mardi 6 mars 2007 Statut Membre Dernière intervention 13 mars 2008 1
21 juin 2007 à 13:09
donc personne peut m'aider?? ou a la limite me renvoyer vers un site ou je pourrais trouver la réponse..

SVP
0
lami20j Messages postés 21331 Date d'inscription jeudi 4 novembre 2004 Statut Modérateur, Contributeur sécurité Dernière intervention 30 octobre 2019 3 567
21 juin 2007 à 13:15
Salut,,

je ne suis pas sur de bien comprendre ce que tu veux

tu peux toujours parser le script bash avec php et récuperer ce que tu as besoin dans des variables php
c'est ça que tu veux?
0
Z-obaze Messages postés 34 Date d'inscription mardi 6 mars 2007 Statut Membre Dernière intervention 13 mars 2008 1
21 juin 2007 à 13:29
euh je ne comprends pas ton termes "parser" mais en gros ouai c'est ce que je veux faire. Je veux récupérer la valeur des variables qui sont initialisé dans le script bash dans celui en php.

voili voilou
0