Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

des faux points dans une cha=c3=aene

5 réponses
Avatar
dadou
Bonsoir la foule,

Je retrouve de très vieux fichiers que je compilais avec « latex »
et que je veux faire plus propres et compilables avec « pdflatex ».
Je cherche donc à détecter tous les fichiers contenant la
chaîne « .eps ».
Pourquoi les commandes
« find ./ -name "*.tex" -exec grep -l .eps {} \; »
et
« find ./ -name "*.tex" -exec grep -l eps {} \; »
trouvent-elles les mêmes choses ?
Il me semble que le point de « .eps » n'est pas pris en compte et que
me sont dénoncés des fichiers contenant juste « eps » sans le point
(comme « varepsilon » par exemple).
Savez vous pourquoi, et comment corriger cela ?

Latextivement,
Didier.

5 réponses

Avatar
Doug713705
Le 2018-08-08, dadou nous expliquait dans
fr.comp.os.linux.configuration
(<pkep3n$jf0$) :
Bonsoir la foule,
Je retrouve de très vieux fichiers que je compilais avec « latex »
et que je veux faire plus propres et compilables avec « pdflatex ».
Je cherche donc à détecter tous les fichiers contenant la
chaîne « .eps ».
Pourquoi les commandes
« find ./ -name "*.tex" -exec grep -l .eps {} ; »
et
« find ./ -name "*.tex" -exec grep -l eps {} ; »
trouvent-elles les mêmes choses ?

Parce que ton expression .eps est interprété comme une RegEx ?
Le point faisant parti du motif et non pas de l'expression il faut donc
l'échapper et mettre le motif entre quotes.
Il me semble que le point de « .eps » n'est pas pris en compte et que
me sont dénoncés des fichiers contenant juste « eps » sans le point
(comme « varepsilon » par exemple).
Savez vous pourquoi, et comment corriger cela ?

find ./ -type f -name "*.tex" -exec grep -l ".eps" {} ;
--
Et nous avions des gueules à briser les miroirs,
À ne montrer nos yeux que dans le contre-jour,
Mais entre deux délires, entre deux idées noires,
Nous étions les plus beaux, nous vivions à rebours.
-- H.F. Thiéfaine, Exil Sur planète fantôme
Avatar
Nicolas George
dadou , dans le message <pkep3n$jf0$, a écrit :
Je retrouve de très vieux fichiers que je compilais avec « latex »
et que je veux faire plus propres et compilables avec « pdflatex ».
Je cherche donc à détecter tous les fichiers contenant la
chaîne « .eps ».
Pourquoi les commandes
« find ./ -name "*.tex" -exec grep -l .eps {} ; »
et
« find ./ -name "*.tex" -exec grep -l eps {} ; »
trouvent-elles les mêmes choses ?

Ce n'est pas le cas : si tu as « epsilon » quelque part dans le fichier,
la seconde commande va le trouver, mais la première ne va le trouver que
s'il n'est pas en début de ligne.
Il me semble que le point de « .eps » n'est pas pris en compte et que
me sont dénoncés des fichiers contenant juste « eps » sans le point
(comme « varepsilon » par exemple).
Savez vous pourquoi, et comment corriger cela ?

Cherche « period » / « point » dans la page de man de grep.
Puis cherche « backslash » et l'option -F.
Et pendant que tu y es, regarde >.
Avatar
dadou
Le 08/08/2018 à 15:09, Doug713705 a écrit :
find ./ -type f -name "*.tex" -exec grep -l ".eps" {} ;

Right! et je vais voir les lectures que Nicolas G. propose...
Avatar
Nicolas George
Doug713705 , dans le message <pkeq23$7f5$, a
écrit :
find ./ -type f -name "*.tex" -exec grep -l ".eps" {} ;

Attention : un backslash seul dans des guillemets doubles est fragile.
Je conseille, au choix :
".eps"
'.eps'
Avatar
Francois Lafont
Bonjour,
On 08/08/2018 07:31 PM, Nicolas George wrote:
Attention : un backslash seul dans des guillemets doubles est fragile.
Je conseille, au choix :
".eps"
'.eps'

J'ajoute simplement à la remarque de Nicolas que grep possède l'option
--fixed-strings (ou -F en version courte) qui permet à grep d'interpréter
le motif comme une simple chaîne « brute » ou il n'y a plus de notion de
regex. Par exemple :
grep -F '.eps' f.txt
va rechercher la chaîne « .eps » dans le fichier f.txt. Plus de regex, un
caractère représente lui-même, un point c'est tout, et on n'a plus à se
poser la question « faut-il échapper tel ou tel caractère ? ».
À+
--
François Lafont