#1 Le 19/01/2021, à 15:05
- DonutMan75
[RESOLU] find/exec/grep me rend chèvre....
Bonjour à tous,
pour chaque fichier txt de mon répertoire, je souhaite extraire la ligne qui contient "P".
Je ne comprends pas pourquoi mon find ne fonctionne pas... C'est pourtant la même commande atomique que je trouve un peu partout sur le net...
$ echo "P :0" > a.txt
$ echo "P :0" > b.txt
$ echo "P :1" > c.txt
$ find . -type f -name "*txt" -exec grep "P" {} \;
find: paramètre manquant pour « -exec »
Vous avez une idée ?
Merci d'avance,
D.
Dernière modification par DonutMan75 (Le 19/01/2021, à 15:43)
Hors ligne
#2 Le 19/01/2021, à 15:14
- DonutMan75
Re : [RESOLU] find/exec/grep me rend chèvre....
Bon après avoir retapé intégralement la commande j'ai réussi à la faire passer...
La commande qui foire s'appelle fko, celle qui marche fok :
$ fko="find . -type f -name "*txt" -exec grep "P" {} \;"
$ fok="find . -type f -name "*txt" -exec grep "P" {} \;"
$ echo "$fko" | od -a
0000000 f i n d sp . sp - t y p e sp f sp -
0000020 n a m e sp * t x t sp - e x e c sp
0000040 g r e p sp P sp { } B sp \ ; nl
0000056
$ echo "$fok" | od -a
0000000 f i n d sp . sp - t y p e sp f sp -
0000020 n a m e sp * t x t sp - e x e c sp
0000040 g r e p sp P sp { } sp \ ; nl
Juste après {}, vous voyez le mystérieux caractère B dans fko ??? Aucune idée de comment il s'est retrouvé là et il ne s'affiche pas non plus :
$ echo $fko
find . -type f -name a.txt b.txt c.txt -exec grep P {} \;
$ echo $fok
find . -type f -name a.txt b.txt c.txt -exec grep P {} \;
$ [ "$fko" == "$fko" ] && echo "EGAUX" || echo "DIFF"
EGAUX
$ [ "$fko" == "$fok" ] && echo "EGAUX" || echo "DIFF"
DIFF
Si quelqu'un a une idée de ce qu'il s'est passé ?
D.
Hors ligne
#3 Le 19/01/2021, à 15:43
- DonutMan75
Re : [RESOLU] find/exec/grep me rend chèvre....
Ok, j'ai eu la révélation en retapant la commande !!!
Pour faire les symboles '{' et '}' je dois maintenir la touche AltGr sur mon clavier.
Lorsque j'ai ensuite tapé la touche espace (pour faire un espace entre '{}' et '\;'), j'ai du laisser la toucher AltGr enfoncée par mégarde et ça m'a créé (je crois) une espace insécable.
Voir par exemple ici : https://stackoverflow.com/questions/313 … altgrspace
Maintenant pourquoi ça affiche 'B' avec od c'est une autre histoire ça...
D.
Hors ligne
#4 Le 19/01/2021, à 16:08
- pingouinux
Re : [RESOLU] find/exec/grep me rend chèvre....
Bonjour,
Maintenant pourquoi ça affiche 'B' avec od c'est une autre histoire ça...
Si tu veux voir les différences, fais plutôt :
hd <<<"$fko"
echo
hd <<<"$fok"
Hors ligne
#5 Le 19/01/2021, à 16:25
- pingouinux
Re : [RESOLU] find/exec/grep me rend chèvre....
-a same as -t a, select named characters, ignoring high-order bit
Voici comment est encodé le "NO-BREAK SPACE"
=> <U00A0> /xc2/xa0 NO-BREAK SPACE
Si tu enleves le bit le plus élevé de c2 et a0, tu obtiens respectivement 42 et 20, encodages de B et de l'espace.
Ajouté :
Shift+AltGr+Space => NO-BREAK SPACE
Dernière modification par pingouinux (Le 19/01/2021, à 16:28)
Hors ligne
#6 Le 19/01/2021, à 17:33
- kamaris
Re : [RESOLU] find/exec/grep me rend chèvre....
Ça ne répond pas à ta question de départ, mais bon, tu devrais plutôt faire
grep 'P' *txt
Hors ligne
#7 Le 19/01/2021, à 19:42
- DonutMan75
Re : [RESOLU] find/exec/grep me rend chèvre....
Hello à vous,
pingouinux, merci pour tes éclaircissements ! Je suis allé un peu vite avec od....
kamaris, je suis bien d'accord avec toi... hélas dans le cas réel d'exécution de la commande (i.e. pas le cas "simplifié" avec a.txt b.txt et c.txt), j'ai *tellement* de fichiers .txt dans le répertoire que la commande explose en vol...
Bonne soirée à tous
D.
Hors ligne
#8 Le 19/01/2021, à 19:52
- kamaris
Re : [RESOLU] find/exec/grep me rend chèvre....
Alors essaie
find . -type f -name "*txt" -exec grep "P" {} +
Hors ligne