# [GREP] Ne fonctionne pas sur certain fichiers.

## anonjoe

Bonjour,

J'ai un petit soucis avec la commande grep.

En vue de l'installation d'un serveur linux RIS pour l'installation de clients sous Windows XP, j'ai copié le cdrom d'installation de windows sur une partition ext3.

J'ai ensuite décrompréssé certains fichiers cab (Drivers et fichiers .inf)

J'ai ensuite voulut rechercher une chaine de carcatère dans les fichiers .inf

Mon soucis c'est que malgré des droits en 777 la commande grep ne me retourne aucun résultat pour une chaine de caractère pourtant présente. (j'ai vérifié sous vi)

----------

## Temet

Bon, j'ose te demander, me tape pas : t'as bien fait gaffe à la casse? Car par défaut, grep lui fait gaffe (y a une option pour pas qu'il soit case sensitive).

----------

## anonjoe

vivi j'ai bien fait gaffe à la case, mais ta raison ca aurait pu être un truc à la con de se style la.

----------

## TrizoLakai

Dans le titre tu dis "certains" fichiers  mais dans ton explication tu sous entends tout les fichiers que tu as testés.

Alors je me demande, si tu fais bien gaffe au sens de la commande grep :

```
grep -i CHAINE NOM_FICHIER
```

Bon en écrivant et en testant je me suis rendu compte que ça faisait une erreur si c'est dans le mauvaise sens   :Embarassed: 

Pour vérifier que ça ne vient pas des droits tu pourrais essayer un 

```
cat | grep -i CHAINE
```

Si l'a ça marche c'est vraiment bizarre   :Confused: 

----------

## anonjoe

Oui en fait ce que je veux dire c'est que lorsque je fais un grep sur un fichier style /etc/profile, la tout marche comme cela devrait.

----------

## anonjoe

 *TrizoLakai wrote:*   

> Pour vérifier que ça ne vient pas des droits tu pourrais essayer un 
> 
> ```
> cat | grep -i CHAINE
> ```
> ...

 

Je tente cela demain a la première heure, je te tiens au courant.

----------

## truc

tu pourrais nous montrer exactement ce que tu recherches, et comment? car là on est un peu en train de brasser du vent.. Bon certes ça fait du bien mais bon  :Razz: 

Bref, ça ne serait pas une histoire d'encoding bidon de windows? style cp1382 (j'sais pas si ça existe un tel encodage c'est juste que j'ai déjà rencontré des encodages très foireux avec un nom de la même forme (et que vim comprenait pourtant très bien))

donnes nous tout plein de détails croustillants!!

----------

## anonjoe

 *TrizoLakai wrote:*   

> Pour vérifier que ça ne vient pas des droits tu pourrais essayer un 
> 
> ```
> cat | grep -i CHAINE
> ```
> ...

 

Non ca ne marche pas

Comment savoir quel encodage a été utilisé pour le fichier ?

----------

## geekounet

 *anonjoe wrote:*   

> Comment savoir quel encodage a été utilisé pour le fichier ?

 

```
$ file fichier
```

ou

```
$ vim fichier

:set fenc
```

dans le cas où file ne le donne pas  :Razz: 

----------

## anonjoe

 *truc wrote:*   

> tu pourrais nous montrer exactement ce que tu recherches, et comment?!

 

Alors en gros je recherche dans des fichiers .inf le nom d'un drivers

Pour cela j'ai décompréssé  depuis le cdrom d'installation de de windows XP tous les fichier .in_ (grace a "cabextract")

J'ai donc une liste de fichier .inf

Si par exemple je fait un :

```
$ cat netamd2.inf
```

j'ai bien l'info que je recherche

mais si je veux l'extraire par un grep : 

```
$ cat netamd2.inf |  grep "Ce_que_je_cherche"
```

Il ne me renvoit rien.Last edited by anonjoe on Tue Dec 04, 2007 8:06 am; edited 1 time in total

----------

## geekounet

cat ... | grep ... c'est le mal ...   :Evil or Very Mad: 

----------

## anonjoe

 *geekounet wrote:*   

> cat ... | grep ... c'est le mal ...  

 

Oui mais a vrai dire j'ai essayer en premier : 

```
grep mon_fichier "ma_recherche"
```

pour le même résultat

----------

## anonjoe

```
$ file mon_fichier

mon_fichier:

```

```
$ vim mon_fichier

:set fenc

  fileencoding=ucs-2le 

```

Bon le problème vient p'tet de la...

----------

## Magic Banana

 *anonjoe wrote:*   

>  *geekounet wrote:*   cat ... | grep ... c'est le mal ...   
> 
> Oui mais a vrai dire j'ai essayer en premier : 
> 
> ```
> ...

 

C'est :

```
grep "ma_recherche" mon_fichier
```

  :Wink: 

----------

## truc

 *anonjoe wrote:*   

>  *truc wrote:*   tu pourrais nous montrer exactement ce que tu recherches, et comment?! 
> 
> Alors en gros je recherche dans des fichiers .inf le nom d'un drivers
> 
> Pour cela j'ai décompréssé  depuis le cdrom d'installation de de windows XP tous les fichier .in_ (grace a "cabextract")
> ...

 

Et au risque d'être chiant... Ce que tu recherches, c'est quoi ndediou?!! Tu as peut-être besoin d'échapper certains caractères.

----------

## anonjoe

 *truc wrote:*   

> Et au risque d'être chiant... Ce que tu recherches, c'est quoi ndediou?!! Tu as peut-être besoin d'échapper certains caractères.

 

je peux rechercher n'importe quelle chaine genre "VEN".

----------

## El_Goretto

Hahahahah.

HAhahaha.

Hé, j'ai une idée, comme çà, mais j'irais peut être me cacher sous la table après.

Mais mettons que ça ait un vague rapport avec les sauts à la ligne style DOS, comment il les gère, les ^M, grep?

Par hasard, tu ferais pas un grep "^VEN machin" fichier ?

----------

## Bapt

Je suis d'accord avec truc, je pense que si grep "ne marche pas" c'est parce qu'il ne trouve rien, donc avoir la chaine recherchée exactement nous aiderai grandement pouvoir voir si il n'y a pas besoin d'échappement.

Sinon une autre solution c'est de faire : 

grep "montruc" mon_fichier

puis 

grep -v "montruc" mon_fichier

Le résultat du second doit afficher exactement l'inverse du premier.

donc dans ton cas si comme je le pense ta recherche est infructueuse, grep -v devrait afficher le fichier complet. (comme un cat)

----------

## cylgalad2

Bonjour,

grep ne peut pas marcher car les .inf sont encodés sur 16 bits (utf-16)...

----------

## Grat

```
iconv -f ucs-2le mon_fichier |grep VEN
```

----------

## Bapt

 *cylgalad2 wrote:*   

> Bonjour,
> 
> grep ne peut pas marcher car les .inf sont encodés sur 16 bits (utf-16)...

 

Je viens de récupérer des .inf sur le net, grep fonctionne très bien dessus, deplus je n'ai jamais entendu parler d'une limitation de grep sur l'utf-16 tu as plus d'info la dessus ?

----------

## loopx

 *geekounet wrote:*   

> cat ... | grep ... c'est le mal ...  

 

C'est vrai, mieux vaut utiliser grep ainsi, quand tu as plusieurs fichier ^^

```

cat *.txt | grep montexte

```

 :Laughing: 

EDIT:, c'est fou comme vous vous prenez la tete   :Laughing: 

un fichier INF => c'est du texte ...

CAT sort du texte ...

GREP filtre ...  

maintenant, comme dis plus haut, il ne faut pas passer un argument à grep qui correspond à 2 lignes du fichiers INF parce que dans ce cas, il y aura peut etre des caractères spéciaux que l'on ne vois pas qui poseront problème ...

Je n'en démors pas: cat *.inf | grep UN_PETIT_TRUC      ca doit fonctionner  :Smile: 

----------

## Bapt

 *loopx wrote:*   

>  *geekounet wrote:*   cat ... | grep ... c'est le mal ...   
> 
> Je n'en démors pas: cat *.inf | grep UN_PETIT_TRUC      ca doit fonctionner 

 

Tout à fait d'accord, mais grep UN_PETIT_TRUC *.inf c'est mieux !!!

----------

## geekounet

 *loopx wrote:*   

> CAT sort du texte ...
> 
> GREP filtre ...

 

Faux ! cat concatène des fichiers. Et donc avec un seul fichier, son usage est inutile ! Il n'est à utiliser que lorsqu'on doit sortir plusieurs fichiers à la suite.

De plus, il ne doit pas être utilisé pour un simple affichage de fichier, c'est more et less qui ont cette fonction.

Et enfin, grep accepte plusieurs fichier en paramètres, et même la récursivité, et peut être paramétré pour ne pas afficher leur nom en début de ligne en plus., Donc cat est encore inutile là.

Bref, tout ça pour éviter de faire un syscall et une création de pipe inutile, ce qui parait minime ici, mais serai bien plus grave dans des scripts complexes où des opérations de ce genre seraient répétées des centaines voire des miliers de fois, genre dans un système d'init. Imagine le basleyaout écrit avec un telle gaspillage de ressources, ça mettrai des heures à booter et le hdd serait mort à la fin (oui j'exagère un peu  :Razz: ).

Et au delà de ça, c'est aussi pour le respect de la philosophie UNIX, qui veut qu'un programme n'ai qu'une tache précise, et qu'il ne serve qu'à celle-ci  :Wink:  Et aussi de ne pas faire compliqué quand on peut faire simple  :Smile: 

EDIT: quelqu'un avait donné une URL une fois sur le sujet, avec les 10 erreurs les plus courantes de mauvaise utilisation du shell, qui pourrait me la rappeller svp ?  :Smile: 

----------

## NEOxAKIRA

 *geekounet wrote:*   

> ÉDIT: quelqu'un avait donné une URL une fois sur le sujet, avec les 10 erreurs les plus courantes de mauvaise utilisation du shell, qui pourrait me la rappeler svp ? 

 

Ça m'intéresse beaucoup, moi j'utilise cat pour afficher le contenu d'un fichier dans un terminal (c'est les profs qui m'ont appris cette commande lol)

et j'utilisais cat sur amstrad cpc 6128+ pour lister les jeux sur une disquette lolLast edited by NEOxAKIRA on Wed Dec 05, 2007 5:30 pm; edited 1 time in total

----------

## geekounet

(Heu, j'avoue que ça m'arrive souvent quand même d'utiliser cat pour afficher un ptit fichier ... mais pour un pipe inutile, jamais  :Wink:  )

----------

## loopx

ok pour les info et remarque mais ... franchement ...

je préfère un "cat" plutot que "less" ou "more" parce qu'il faut faire "q" pour quitter   :Laughing: 

----------

## truc

 *loopx wrote:*   

> ok pour les info et remarque mais ... franchement ...
> 
> je préfère un "cat" plutot que "less" ou "more" parce qu'il faut faire "q" pour quitter  

 

meuh non....

less --quit-at-eof

(ou --QUIT-AT-EOF si vraiment tu préfères)

(tu peux te sevir de la variable d'environment LESS pour y "sauvegarder" tes préférences   :Twisted Evil:  )

----------

