OVH Cloud OVH Cloud

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
Jacques L'helgoualc'h
Le 16-03-2006, a écrit :
Merci à vous


de rien,

Et tant que j'y suis comment remplacer

$$....$$

par [.....]


C'est /nettement/ plus compliqué : essaie un « grep -F '$$' » sur tes
fichiers *.tex, il peut y avoir des $$42$$$, des verb+$$+, des $$ en
commentaire, etc.

En gros, seul (La)TeX « comprend » vraiment où commence le mode
mathématique... => fu2 fr.comp.text.tex (ça fera toujours plaisir à
Josselin).

Avec Emacs et AUCTeX, la colorisation est généralement satisfaisante, on
devrait donc pouvoir distinguer le $$ ouvrant du fermant en elisp : =>
fu2 fr.comp.applications.emacs ?

--
Jacques L'helgoualc'h

Avatar
Stephane Chazelas
On Thu, 16 Mar 2006 12:07:42 +0000 (UTC), Jacques L'helgoualc'h wrote:
Le 16-03-2006, a écrit :
Merci à vous


de rien,

Et tant que j'y suis comment remplacer

$$....$$

par [.....]


C'est /nettement/ plus compliqué : essaie un « grep -F '$$' » sur tes
fichiers *.tex, il peut y avoir des $$42$$$, des verb+$$+, des $$ en
commentaire, etc.
[...]


perl -pi -e '
s{
$$ ((?: . | .)*?) $$ |
% .*?n |
verb(.).*?1 |
. |
[^%$]+ |
.
}{defined($1) ? "[$1]" : $&}gsxe' ...

alors.

Ce n'est peut-etre pas exhaustif, peut-etre que les habitués de
fctt peuvent nous parler des eventuels autres cas a considerer.

--
Stephane


Avatar
Stephane Chazelas
On 16 Mar 2006 12:28:06 GMT, Stephane Chazelas wrote:
On Thu, 16 Mar 2006 12:07:42 +0000 (UTC), Jacques L'helgoualc'h wrote:
Le 16-03-2006, a écrit :
Merci à vous


de rien,

Et tant que j'y suis comment remplacer

$$....$$

par [.....]


C'est /nettement/ plus compliqué : essaie un « grep -F '$$' » sur tes
fichiers *.tex, il peut y avoir des $$42$$$, des verb+$$+, des $$ en
commentaire, etc.
[...]


perl -pi -e '
s{
$$ ((?: . | .)*?) $$ |
^

manque un la:

$$ ((?: . | .)*?) $$ |

% .*?n |
verb(.).*?1 |
. |
[^%$]+ |
.
}{defined($1) ? "[$1]" : $&}gsxe' ...


--
Stephane



Avatar
Jacques L'helgoualc'h
[En-tête "Followup-To:" positionné à fr.comp.os.unix.] (ou un groupe
Perl ?)
Le 16-03-2006, Stephane Chazelas a écrit :
On 16 Mar 2006 12:28:06 GMT, Stephane Chazelas wrote:
On Thu, 16 Mar 2006 12:07:42 +0000 (UTC), Jacques L'helgoualc'h wrote:
Le 16-03-2006, a écrit :
[...] comment remplacer

$$....$$

par [.....]


C'est /nettement/ plus compliqué : essaie un « grep -F '$$' » sur tes
fichiers *.tex, il peut y avoir des $$42$$$, des verb+$$+, des $$ en
commentaire, etc.




aussi des

begin{verbatim}
...
end{verbatim}

et autres, mais bon, faire un script pervers-proof doit être à peu près
impossible.

[...]

perl -pi -e '
s{
$$ ((?: . | .)*?) $$ |
^

manque un la:

$$ ((?: . | .)*?) $$ |

% .*?n |
verb(.).*?1 |
. |
[^%$]+ |
.
}{defined($1) ? "[$1]" : $&}gsxe' ...



Les regexpes Perl sont très jolies, mais chez moi© celle-là ne marche
pas toujours :/ (debian sarge, Perl 5.8.4)

$ cat essai.tex
debut
$$ formule 1 $$ à $10$$
bla

$$
F2
$$

bla
$$ x + y $$ avec verb+$$+

et enfin $$
z
$$ % et $$ F6 $$

$ $ perl -p -e '
s{
$$ ((?: . | .)*?) $$ |
% .*?n |
verb(.).*?1 |
. |
[^%$]+ |
.
}{defined($1) ? "[$1]" : $&}gsxe' < essai.tex
debut
[ formule 1 ] à $10$$
bla

$$
F2
$$

bla
[ x + y ] avec verb+$$+

et enfin $$
z
[ % et ] F6 $$


Bien entendu, un simple script sed tombe sur tous les pièges

$ sed -n 'H;${x;s,$$([^$]*)$$,[1],g;p}' < essai.tex
debut
[ formule 1 ] à $10[
bla

]
F2
[

bla
] x + y [ avec verb+]+

et enfin [
z
] % et [ F6 ]


--
Jacques L'helgoualc'h




Avatar
Stephane Chazelas
On Thu, 16 Mar 2006 15:06:57 +0000 (UTC), Jacques L'helgoualc'h wrote:
[...]
$ $ perl -p -e '
s{
$$ ((?: . | .)*?) $$ |
% .*?n |
verb(.).*?1 |
. |
[^%$]+ |
.
}{defined($1) ? "[$1]" : $&}gsxe' < essai.tex



Oops, bien sur, le "s" dans les attributs de substitution ne
sert a rien si on ne dit pas a perl de ne pas travailler sur une
ligne a la fois. Utiliser perl -0777 -pe ...

perl -0777 -pe '
s{
$$ ((?: . | .)*?) $$ |
% .*?n |
verb(.).*?1 |
. |
[^%$]+ |
.
}{defined($1) ? "[$1]" : $&}gsxe' essai.tex

donne:

debut
[ formule 1 ] à $10$$
bla

[
F2
]

bla
[ x + y ] avec verb+[+

et enfin ]
z
[ % et ] F6 $$

--
Stephane

Avatar
Stephane Chazelas
On 16 Mar 2006 16:48:55 GMT, Stephane Chazelas wrote:
On Thu, 16 Mar 2006 15:06:57 +0000 (UTC), Jacques L'helgoualc'h wrote:
[...]
$ $ perl -p -e '
s{
$$ ((?: . | .)*?) $$ |
% .*?n |
verb(.).*?1 |
. |
[^%$]+ |
.
}{defined($1) ? "[$1]" : $&}gsxe' < essai.tex



Oops, bien sur, le "s" dans les attributs de substitution ne
sert a rien si on ne dit pas a perl de ne pas travailler sur une
ligne a la fois. Utiliser perl -0777 -pe ...

perl -0777 -pe '
s{
$$ ((?: . | .)*?) $$ |
% .*?n |
verb(.).*?1 |
. |
[^%$]+ |
.
}{defined($1) ? "[$1]" : $&}gsxe' essai.tex
[...]


Hmmm, sorry

perl -0777 -pe '
s{
$$ ((?: . | .)*?) $$ |
% .*?n |
verb(.).*?2 |
begin{verbatim}.*?end{verbatim} |
. |
[^%$]+ |
.
}{defined($1) ? "[$1]" : "$&"}gsxe'

debut
[ formule 1 ] à $10$$
bla

[
F2
]

bla
[ x + y ] avec verb+$$+

et enfin [
z
] % et $$ F6 $$


--
Stephane


Avatar
noone
Merci à vous

Et tant que j'y suis comment remplacer

$$....$$

par [.....]



Merci mais en clair c'est quoi la soluce (je ne lis pas du tout les
expressions régulières (je connais le mot regexp... c'est déjà pas mal
pour un non informaticien ;-) )

Avatar
Jacques L'helgoualc'h
Le 16-03-2006, Stephane Chazelas a écrit :
[...]


J'ai aussi rajouté un commentaire dans une formule :

$ perl -0777 -pe '
s{
$$ ((?: . | % .*?n | .)*?) $$ |
% .*?n |
verb(.).*?2 |
begin{verbatim}.*?end{verbatim} |
. |
[^%$]+ |
.
}{defined($1) ? "[$1]" : "$&"}gsxe' < essai.tex
debut
[ formule 1 ] à $10$$
bla

[
F2 % $$ en commentaire dans la formule
]

bla
[ x + y ] avec verb+$$+

et enfin [
z
] % et $$ F6 $$

Merci !
--
Jacques L'helgoualc'h

Avatar
Stephane Chazelas
On Thu, 16 Mar 2006 18:22:00 +0100, wrote:
Merci à vous

Et tant que j'y suis comment remplacer

$$....$$

par [.....]



Merci mais en clair c'est quoi la soluce (je ne lis pas du tout les
expressions régulières (je connais le mot regexp... c'est déjà pas mal
pour un non informaticien ;-) )


find . -name '*.tex' -type f -exec perl -0777 -pi -e '
s/sectionb/Section/g;
s{
$$ ((?: . | . | %.*?n)*?) $$ |
%.*?n |
verb(.).*?2 |
begin{verbatim}.*?end{verbatim} |
. |
.[^%$]*
}{defined($1) ? "[$1]" : "$&"}gsxe;' {} +

--
Stephane


Avatar
noone
find . -name '*.tex' -type f -exec perl -0777 -pi -e '
s/sectionb/Section/g;
s{
$$ ((?: . | . | %.*?n)*?) $$ |
%.*?n |
verb(.).*?2 |
begin{verbatim}.*?end{verbatim} |
. |
.[^%$]*
}{defined($1) ? "[$1]" : "$&"}gsxe;' {} +




Fichtre !!!

Merci

1 2 3