|script bash]aide commande unix
Z-obaze
Messages postés
34
Statut
Membre
-
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
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:
- |script bash]aide commande unix
- Invite de commande - Guide
- Script vidéo youtube - Guide
- Commande terminal mac - Guide
- Diskpart commande - Guide
- Commande dism - Guide
25 réponses
Salut,
Essaie comme ça :
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;-))
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.
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.
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.
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.
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
je vous remercie mais je pense que j'aurai encore d'autre questions d'ici peu de temps.lol
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
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)...
;-))
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)...
;-))
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
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
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...
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...
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
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
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
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
merki de vos réponses, mais fullvolant t'as solution ne renvoie rien a l'écran. je ne vois pas ce qui déconne..
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
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
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;-))
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
if [ -n $variable ];
then
...
fi
mai ça ne fonctionne pas, je comprends pas pourquoi
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]$;-))
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
Merci
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
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
donc personne peut m'aider?? ou a la limite me renvoyer vers un site ou je pourrais trouver la réponse..
SVP
SVP