#1 Le 26/11/2021, à 23:57
- Romaing69
Modifier une ligne sur plusieurs fichiers
Bonjour,
J'ai tout un répertoire (décomposé en sous-répertoires) contenant plusieurs fichiers .tex
Or, j'aimerais modifier une ligne (qui n'est pas forcément présente dans le fichier ou alors elle l'est qu'une fois) par autre chose, le tout pour TOUS les fichiers .tex
Comment faire ?
Hors ligne
#2 Le 27/11/2021, à 00:07
- Vobul
Re : Modifier une ligne sur plusieurs fichiers
Salut,
Tu vas avoir besoin de "sed" et possiblement de "find" également.
man find
man sed
Ça pourrait donner un truc comme ça (fait à la va-vite sans tester) :
find . -type f -name '*.tex' -exec sed -ie 's/AAA/BBB/g' \;
Il y a bien sûr d'autres approches possibles mais celle-là est celle que j'utiliserai moi.
Dernière modification par Vobul (Le 27/11/2021, à 00:08)
Vobul
Utilisez le retour utilisable de commandes !!!
J'aime la langue française, mais je parle franglais, deal with it.
RTFM
Hors ligne
#3 Le 27/11/2021, à 01:34
- Tawal
Re : Modifier une ligne sur plusieurs fichiers
Hello,
Je suis de ton avis Vobul.
Si il y a beaucoup de fichiers .tex, il vaudrait mieux faire :
find . -type f -name '*.tex' -exec sed -ie 's/AAA/BBB/g' '{}' \+
(il te manque le {} dans ta commande )
Il faut aussi dire qu'il faut être placé dans le répertoire de recherche et que AAA est remplacé par BBB.
Et que c'est récursif.
Dernière modification par Tawal (Le 27/11/2021, à 01:36)
Le savoir n'a d’intérêt que si on le transmet.
Useless Use of Cat Award
Filenames and Pathnames in Shell: How to do it Correctly
À chaque problème sa solution, à chaque solution son moyen, si pas de moyen, toujours le problème !
Hors ligne
#4 Le 27/11/2021, à 04:41
- Vobul
Re : Modifier une ligne sur plusieurs fichiers
(il te manque le {} dans ta commande )
cépafo, mais bon j'avais prévenu
Vobul
Utilisez le retour utilisable de commandes !!!
J'aime la langue française, mais je parle franglais, deal with it.
RTFM
Hors ligne
#5 Le 27/11/2021, à 14:19
- Romaing69
Re : Modifier une ligne sur plusieurs fichiers
Avant de le faire, on est d'accord que c 'est bon là ?
find . -type f -name '*.tex' -exec sed -ie 's/"\input{*}"/"\input{C:/Users/33623/Documents/LaTeXPreambles/commands.tex}"/g' '{}' \+
Hors ligne
#6 Le 27/11/2021, à 14:33
- kamaris
Re : Modifier une ligne sur plusieurs fichiers
Les guillemets autour des directives \input sont en trop, à moins qu'ils soient présents dans tes fichiers .tex (je ne me souviens plus si c'est possible).
Dernière modification par kamaris (Le 27/11/2021, à 14:34)
Hors ligne
#7 Le 27/11/2021, à 14:34
- Romaing69
Re : Modifier une ligne sur plusieurs fichiers
Je les ai mis car j'avais peur que les / dans les \input perturbent la commande
Dernière modification par Romaing69 (Le 27/11/2021, à 14:34)
Hors ligne
#8 Le 27/11/2021, à 14:37
- kamaris
Re : Modifier une ligne sur plusieurs fichiers
Ils la perturberont effectivement, mais ça n'est pas comme ça qu'il faut faire, et il faut aussi protéger les antislashs et l'astérisque :
find . -type f -name '*.tex' -exec sed -i 's%\\input{\*}%\\input{C:/Users/33623/Documents/LaTeXPreambles/commands.tex}%g' '{}' +
Dernière modification par kamaris (Le 27/11/2021, à 14:40)
Hors ligne
#9 Le 27/11/2021, à 14:51
- Romaing69
Re : Modifier une ligne sur plusieurs fichiers
Ils la perturberont effectivement, mais ça n'est pas comme ça qu'il faut faire, et il faut aussi protéger les antislashs et l'astérisque :
find . -type f -name '*.tex' -exec sed -i 's%\\input{\*}%\\input{C:/Users/33623/Documents/LaTeXPreambles/commands.tex}%g' '{}' +
Mes fichiers n'ont pas changé avec cette commande
Hors ligne
#10 Le 27/11/2021, à 14:54
- kamaris
Re : Modifier une ligne sur plusieurs fichiers
Que donne cette commande dans ton terminal :
echo '\input{*}' | sed 's%\\input{\*}%\\input{C:/Users/33623/Documents/LaTeXPreambles/commands.tex}%g'
Hors ligne
#11 Le 27/11/2021, à 15:32
- Sciensous
Re : Modifier une ligne sur plusieurs fichiers
ou remplacer find . par find /cheminousontlesfichiers ?
Dernière modification par Sciensous (Le 27/11/2021, à 15:32)
antiX 19 et 21 et Ubuntu 20.04 et 22.04
( sous LXDE et gnome-shell )
Hors ligne
#12 Le 27/11/2021, à 17:11
- Romaing69
Re : Modifier une ligne sur plusieurs fichiers
Que donne cette commande dans ton terminal :
echo '\input{*}' | sed 's%\\input{\*}%\\input{C:/Users/33623/Documents/LaTeXPreambles/commands.tex}%g'
J'ai ça :
romaing69@PC-FIXE-LO:~/LaTeX$ echo '\input{*}' | sed 's%\\input{\*}%\\input{C:/Users/33623/Documents/LaTeXPreambles/commands.tex}%g'
\input{C:/Users/33623/Documents/LaTeXPreambles/commands.tex}
Hors ligne
#13 Le 27/11/2021, à 17:23
- kamaris
Re : Modifier une ligne sur plusieurs fichiers
La commande sed fonctionne donc correctement.
Maintenant il y a soit un problème dans la commande find, que tu peux tester comme ça pour voir si elle trouve bien tes fichiers :
find . -type f -name '*.tex'
, soit un problème dans le motif à trouver dans les fichiers : \input{*}, qui n'y figure pas, ou pas tout à fait comme ça.
Hors ligne
#14 Le 27/11/2021, à 19:45
- Tawal
Re : Modifier une ligne sur plusieurs fichiers
C'est peut-être aussi que c'est pas un \input{*} littéral qu'on cherche mais plutôt un \input{suite_de_caractères}.
Du coup la commande sed deviendrait :
sed 's%\\input{.*}%\\input{C:/Users/33623/Documents/LaTeXPreambles/commands.tex}%g'
Le savoir n'a d’intérêt que si on le transmet.
Useless Use of Cat Award
Filenames and Pathnames in Shell: How to do it Correctly
À chaque problème sa solution, à chaque solution son moyen, si pas de moyen, toujours le problème !
Hors ligne
#15 Le 28/11/2021, à 15:34
- Romaing69
Re : Modifier une ligne sur plusieurs fichiers
C'est peut-être aussi que c'est pas un \input{*} littéral qu'on cherche mais plutôt un \input{suite_de_caractères}.
Du coup la commande sed deviendrait :sed 's%\\input{.*}%\\input{C:/Users/33623/Documents/LaTeXPreambles/commands.tex}%g'
Oui c'est ça que je cherchais à faire ! Désolé de pas l'avoir précisé plus tôt.
J'ai donc fait cette commande
find . -type f -name '*.tex' -exec sed -i 's%\\input{.*}%\\input{C:/Users/33623/Documents/LaTeXPreambles/commands.tex}%g' '{}' +
et tout a été modifié ! Merci à vous
Dernière modification par Romaing69 (Le 28/11/2021, à 15:35)
Hors ligne
#16 Le 28/11/2021, à 20:15
- kamaris
Re : Modifier une ligne sur plusieurs fichiers
C'est peut-être aussi que c'est pas un \input{*} littéral qu'on cherche mais plutôt un \input{suite_de_caractères}
Eh oui, bien sûr
\input{*} n'a probablement pas de sens en latex, mais ça fait trop longtemps que j'en n'ai pas fait pour y penser.
Hors ligne