Rechercher : dans
Par :

|script bash]aide commande unix

Dernière réponse le 27 jun 2007 à 13:07:33 Z-obaze, le 19 jun 2007 à 13:30:53 
 Signaler ce message aux modérateurs

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

Meilleures réponses pour « |script bash]aide commande unix » dans :
Commandes UNIX Voir Tableau des principales commandes UNIX Commande Unix Description Options ls liste le contenu d'un répertoire -a Affiche tous les fichiers, y compris les fichiers cachés ...
Comment récupérer le résultat d'une commande dans une variable VoirComment récupérer le résultat d'une commande dans une variable Préambule Syntaxe Exemples Préambule Il est bien souvent nécessaire de récupérer le résultat d'une commande (ou de son code retour) dans une variable afin de pouvoir...
Exécuter un script shell VoirExécution d'un script Pour pouvoir exécuter un script ou un programme en ligne de commande il y a plusieurs possibilités : 1. Le chemin absolu 2. Le chemin relatif 3. Modifier la variable PATH Note: Le Sha...
Bash - Les paramètres VoirIntroduction Les paramètres positionnels Exemple 1 Les paramètres spéciaux Exemple 2 Initialiser des paramètres - La commande "set" - Exemples - La commande "shift" - Exemple 3 Introduction Il est possible de fournir à un script,...

1

FullVolant, le 19 jun 2007 à 13:36:52

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.

Répondre à FullVolant

2

Z-obaze, le 19 jun 2007 à 14:20:44

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.

Répondre à Z-obaze

3

jipicy, le 19 jun 2007 à 14:33:32
  • +1

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
;-))
Z'@+...che.
JP : Zen, my Nuggets ! ;-)
Le savoir n'est bon que s'il est partagé.

Répondre à jipicy

4

Z-obaze, le 19 jun 2007 à 14:39:46

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

Répondre à Z-obaze

5

jipicy, le 19 jun 2007 à 14:48:40

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)...

;-)) Z'@+...che.

JP : Zen, my Nuggets ! ;-)
Le savoir n'est bon que s'il est partagé.

Répondre à jipicy

6

Z-obaze, le 19 jun 2007 à 15:38: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

Répondre à Z-obaze

7

jipicy, le 19 jun 2007 à 15:46:10

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...
Z'@+...che.

JP : Zen, my Nuggets ! ;-)
Le savoir n'est bon que s'il est partagé.

Répondre à jipicy

8

Z-obaze, le 19 jun 2007 à 15:53:28

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

Répondre à Z-obaze

9

jipicy, le 19 jun 2007 à 16:17:38

sed -n '/chaîne1/,/chaîne2/p' fichier
;-))
Z'@+...che.
JP : Zen, my Nuggets ! ;-)
Le savoir n'est bon que s'il est partagé.

Répondre à jipicy

10

FullVolant, le 19 jun 2007 à 16:33:11

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

Répondre à FullVolant

11

Z-obaze, le 20 jun 2007 à 09:07:11

Merki de vos réponses, mais fullvolant t'as solution ne renvoie rien a l'écran. je ne vois pas ce qui déconne..

Répondre à Z-obaze

12

Z-obaze, le 20 jun 2007 à 10:59:02

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

Répondre à Z-obaze

13

jipicy, le 20 jun 2007 à 13:40:13

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
;-))
Z'@+...che.
JP : Zen, my Nuggets ! ;-)
Le savoir n'est bon que s'il est partagé.

Répondre à jipicy

14

Z-obaze, le 20 jun 2007 à 17:05:23

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

Répondre à Z-obaze

15

jipicy, le 20 jun 2007 à 17:26:30

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]$
;-))
Z'@+...che.
JP : Zen, my Nuggets ! ;-)
Le savoir n'est bon que s'il est partagé.

Répondre à jipicy

16

Z-obaze, le 21 jun 2007 à 09:22:24

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

Répondre à Z-obaze

17

Z-obaze, le 21 jun 2007 à 10:16: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

Répondre à Z-obaze

18

Z-obaze, le 21 jun 2007 à 13:09:16

Donc personne peut m'aider?? ou a la limite me renvoyer vers un site ou je pourrais trouver la réponse..

SVP

Répondre à Z-obaze

19

lami20j, le 21 jun 2007 à 13:15:51

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?
lami20j

Répondre à lami20j