2 votes

Comment faire plusieurs remplacements de motifs avec sed

Ceci est mon fichier exemple.txt

{foo}
{bar}
{f}oo}
{ba{r}
{fo}o}
{b{ar}

Je veux ce résultat:

foo
bar
f}oo
ba{r
fo}o
b{ar

j'ai une commande dans notepad++ pour obtenir le résultat ci-dessus

([}]\r\n)|(\r\n[{])|(^[{])|([}]$)
(?1})(?2

J'ai essayé avec cette commande sed

sed -i 's@}\r\n@@g' *.html

qui n'a pas modifié mon fichier. Comment faire cela correctement avec sed ?

2voto

RomanPerekhrest Points 54365

Utilisez la commande sed suivante avec un modèle regex spécifique :

sed -ri 's/\{(.+)\}/

L'option -r permet les expressions régulières étendues


\{(.+)\} - correspond à n'importe quel caractère encadré de crochets {}

\1 - fait référence au premier groupe capturé qui est (.+)

1voto

codeforester Points 17582

Que diriez-vous d'utiliser deux expressions simples, comme ceci :

sed -i '' -e 's/^./
  • remplace le premier caractère par

    et le dernier caractère par

    laissant le reste de la ligne intact.

  • pas besoin de groupes de capture

Donne cette sortie :

foo
bar
f}oo
ba{r
fo}o
b{ar

0voto

glenn jackman Points 69748

Comment

sed -e 's/{\(.*\)}/

sed est orienté ligne, donc vous ne trouverez pas de \n dans un enregistrement (sauf si vous utilisez certaines commandes avancées).

0voto

Shakiba Moshiri Points 6556

Il peut vous intéresser d'utiliser Perl

$ cat file
{foo}
{bar}
{f}oo}
{ba{r}
{fo}o}
{b{ar}
$
$ perl -lpe 's/^.(.*?).$/

Il a aussi enregistrer sur place comme sed avec -i

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X