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

Débutant Script Bash - remplacement dans un fichier texte

21 réponses
Avatar
noone
Bonjour,

je dois modifier un gros document LaTeX.

Je dois remplacer dans tous les fichiers *.tex (y compris dans les sous
répertoires) \section par \Section mais je ne sais pas trop comment m'y
prendre.

Merci de m'aider

10 réponses

1 2 3
Avatar
Stephane Chazelas
2006-03-16, 09:26(+01), :
[...]
je dois modifier un gros document LaTeX.

Je dois remplacer dans tous les fichiers *.tex (y compris dans les sous
répertoires) section par Section mais je ne sais pas trop comment m'y
prendre.
[...]


Avec zsh, je ferais tout simplement:

perl -pi -e 's/section/Section/g' ./**/*.tex(.)

Avec bash:

find . -name '*.tex' -type f -exec perl -pi -e '
s/section/Section/g' {} +

--
Stéphane

Avatar
Jacques L'helgoualc'h
Bonjour,

Le 16-03-2006, Stephane Chazelas a écrit :
2006-03-16, 09:26(+01), :
[...]
je dois modifier un gros document LaTeX.

Je dois remplacer dans tous les fichiers *.tex (y compris dans les sous
répertoires) section par Section mais je ne sais pas trop comment m'y
prendre.



Faut-il aussi modifier de même la version étoilée, ainsi que

sectionheading
sectionlevel
sectionmark
sectionname

quel que soit le contexte ?

[...]

Avec zsh, je ferais tout simplement:

perl -pi -e 's/section/Section/g' ./**/*.tex(.)


Deux lettres de moins à taper avec « sed -i » (GNU Sed, version >=4 :)

Avec bash:

find . -name '*.tex' -type f -exec perl -pi -e '
s/section/Section/g' {} +


Ce ne serait pas mieux avec find . -name '*.tex' -type f | xargs ... ?

--
Jacques L'helgoualc'h


Avatar
Stephane Chazelas
On Thu, 16 Mar 2006 09:26:13 +0000 (UTC), Jacques L'helgoualc'h wrote:
[...]
Avec zsh, je ferais tout simplement:

perl -pi -e 's/section/Section/g' ./**/*.tex(.)


Deux lettres de moins à taper avec « sed -i » (GNU Sed, version >=4 :)


Oui, mais GNU n'est pas Unix.

Avec bash:

find . -name '*.tex' -type f -exec perl -pi -e '
s/section/Section/g' {} +


Ce ne serait pas mieux avec find . -name '*.tex' -type f | xargs ... ?


Non, au contraire, pourquoi? xargs n'est pas compatible avec
find (a moins d'utiliser des options specifiques a GNU ou BSD).

--
Stephane


Avatar
Stephane Chazelas
On Thu, 16 Mar 2006 09:26:13 +0000 (UTC), Jacques L'helgoualc'h wrote:
[...]
Avec zsh, je ferais tout simplement:

perl -pi -e 's/section/Section/g' ./**/*.tex(.)


Deux lettres de moins à taper avec « sed -i » (GNU Sed, version >=4 :)


Oui, mais GNU n'est pas Unix.

Avec bash:

find . -name '*.tex' -type f -exec perl -pi -e '
s/section/Section/g' {} +


Ce ne serait pas mieux avec find . -name '*.tex' -type f | xargs ... ?


Non, au contraire, pourquoi? xargs n'est pas compatible avec
find (a moins d'utiliser des options specifiques a GNU ou BSD).

--
Stephane


Avatar
Stephane Chazelas
On Thu, 16 Mar 2006 09:26:13 +0000 (UTC), Jacques L'helgoualc'h wrote:
[...]
Avec zsh, je ferais tout simplement:

perl -pi -e 's/section/Section/g' ./**/*.tex(.)


Deux lettres de moins à taper avec « sed -i » (GNU Sed, version >=4 :)


Oui, mais GNU n'est pas Unix.

Avec bash:

find . -name '*.tex' -type f -exec perl -pi -e '
s/section/Section/g' {} +


Ce ne serait pas mieux avec find . -name '*.tex' -type f | xargs ... ?


Non, au contraire, pourquoi? xargs n'est pas compatible avec
find (a moins d'utiliser des options specifiques a GNU ou BSD).

--
Stephane


Avatar
Stephane Chazelas
On Thu, 16 Mar 2006 09:26:13 +0000 (UTC), Jacques L'helgoualc'h wrote:
[...]
Avec zsh, je ferais tout simplement:

perl -pi -e 's/section/Section/g' ./**/*.tex(.)


Deux lettres de moins à taper avec « sed -i » (GNU Sed, version >=4 :)


Oui, mais GNU n'est pas Unix.

Avec bash:

find . -name '*.tex' -type f -exec perl -pi -e '
s/section/Section/g' {} +


Ce ne serait pas mieux avec find . -name '*.tex' -type f | xargs ... ?


Non, au contraire, pourquoi? xargs n'est pas compatible avec
find (a moins d'utiliser des options specifiques a GNU ou BSD).

--
Stephane


Avatar
Jacques L'helgoualc'h
Le 16-03-2006, Stephane Chazelas a écrit :
On Thu, 16 Mar 2006 09:26:13 +0000 (UTC), Jacques L'helgoualc'h wrote:
[...]
Avec zsh, je ferais tout simplement:

perl -pi -e 's/section/Section/g' ./**/*.tex(.)


Deux lettres de moins à taper avec « sed -i » (GNU Sed, version >=4 :)


Oui, mais GNU n'est pas Unix.


C'est bien pourquoi je précisais.

Avec bash:

find . -name '*.tex' -type f -exec perl -pi -e '
s/section/Section/g' {} +




Le « + » n'est pas accepté par le find de debian sarge, il lui faut un
« ; », «find» de GNU version 4.1.20

Ce ne serait pas mieux avec find . -name '*.tex' -type f | xargs ... ?


Non, au contraire, pourquoi?


Pour ne pas lancer une instance de perl par fichier, quand + ne marche
pas.

xargs n'est pas compatible avec find (a moins d'utiliser des options
specifiques a GNU ou BSD).


Ah oui, c'est plutôt find . -name '*.tex' -type f -print0 | xargs -0 ...



Pour ne remplacer que section (et section*), mais pas sectionmark(*)
et autres, on peut utiliser 's/sectionb/Section/g' (avec Perl comme
avec GNU Sed v.4).

(*) Utilisation à vérifier dans le style et/ou la classe maison...
--
Jacques L'helgoualc'h



Avatar
noone
Merci à vous

Et tant que j'y suis comment remplacer

$$....$$

par [.....]
Avatar
Stephane Chazelas
On Thu, 16 Mar 2006 10:23:12 +0000 (UTC), Jacques L'helgoualc'h wrote:
[...]
find . -name '*.tex' -type f -exec perl -pi -e '
s/section/Section/g' {} +




Le « + » n'est pas accepté par le find de debian sarge, il lui faut un
« ; », «find» de GNU version 4.1.20


Ah oui, mais le + est Unix (specifié par la Single Unix
Specification et POSIX) et on est sur fr.comp.os.*unix*, pas
fr.comp.os.gnu. Cela dit, les dernieres versions de GNU find
doivent l'avoir.

--
Stephane




Avatar
Stephane Chazelas
On Thu, 16 Mar 2006 11:30:22 +0100, wrote:

Merci à vous

Et tant que j'y suis comment remplacer

$$....$$

par [.....]


perl -pi -e '
s/section/Section/g;
s/$$(.*?)$$/[$1]/g;' ./**/*.tex

--
Stephane

1 2 3