|script bash]aide commande unix

Z-obaze Messages postés 34 Statut Membre -  
Z-obaze Messages postés 34 Statut Membre -
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 41342 Statut Modérateur 4 896
 
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
FullVolant
 
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 Statut Membre 1
 
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 Statut Membre 1
 
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 41342 Statut Modérateur 4 896
 
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 Statut Membre 1
 
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 41342 Statut Modérateur 4 896
 
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 Statut Membre 1
 
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 41342 Statut Modérateur 4 896
 
sed -n '/chaîne1/,/chaîne2/p' fichier
;-))
0
FullVolant
 
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 Statut Membre 1
 
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 Statut Membre 1
 
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 41342 Statut Modérateur 4 896
 
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 Statut Membre 1
 
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 41342 Statut Modérateur 4 896
 
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 Statut Membre 1
 
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 Statut Membre 1
 
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 Statut Membre 1
 
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 21644 Statut Modérateur, Contributeur sécurité 3 570
 
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 Statut Membre 1
 
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