[ssfr] Re: [ssfr] sed : remplacer guillemets anglais par guillements français |
[ Thread Index |
Date Index
| More debianworld.org/shellscript-fr Archives
]
dlist@xxxxxxxxxx wrote:
> Le 01-11-2008, à 15:51:29 +0000, Edi Stojicevic (estojicevic@xxxxxxxxxxxxxxx) a écrit :
>
>> Lignes : 45
>>
>> * dlist@xxxxxxxxxx <dlist@xxxxxxxxxx> [2008-11-01 14:36:45 +0100] wrote :
>>
>>> Bonjour,
>> Salut,
>>
>>> J'ai plusieurs fichiers tex où il faudrait remplacer les " par des «»,
>>> je me dis que c'est pour sed ça.
>>>
>>> le motif est
>>> "puis 0,1 ou plus espaces puis un mot puis 0,1 ou plus espaces et enfin"
>>>
>>> Ce motif doit être remplacé par
>>>
>>> «un_espace_insécable puis le mot puis un_espace_insécable puis »
>>>
>>> Faut traduire ça en sed maintenant, et c'est là que ça se complique
>>> (pour moi).
>> En perl :
>>
>> perl -p -i.old -e 's/"\s+(\w+)\s+"/« $1 »/' fichier.txt
>
> Désolé d'être mauvais joueur mais ça ne marche carrément pas ; sur mon
> fichier test, voici la sortie :
>
> "un"
> "deux"
> "un mot"
> « un »
> " un mot voilà "
> pas de mot
>
> et là non plus
>
>
> Seuls les guillemets de la 4e ligne ont été remplacés.
Il est aussi possible, plutôt que de définir ce que l'on cherche, de
définir ce que l'on ne veut pas.
perl -pi.old -e 's/"\s*([^\"]*)"\s*/« $1 »/' fichier.txt
remplacera tout ce qui se trouve entre 2 "
C'est violent et ne marchera pas pour les guillemets imbriquées, pas
plus que pour les caractères protégés par un \ mais cela devrait remplir
99% des autres cas.
Si le motif doit être sur plusieurs lignes, une solution pourrait être :
perl -pi.old -e 'undef $/;s/"\s*([^\"]*)\s*"/« $1 »/g' fichier.txt
A+
Thierry
>
>
>> L'avantage par rapport à sed est que tu n'es pas obligé de passer par un
>> fichier tampon et la substitution est directement faite dans le fichier
>> et tu as un fichier .old qui est le fichier original.
>
> Merci pour l'explication.
>
> Steve
>
> ---
>
>
---