regex localize e substitua os caracteres 0x0D, 0x0A

1

Eu tenho um arquivo de texto de um despejo de banco de dados com alguns caracteres de quebra de linha ( 0x0A0x0D ) no meio das linhas. Quero substituí-los por vírgulas, mas não posso fazê-lo simplesmente, porque esses caracteres são os caracteres de quebra de linha reais em que faço quero quebras de linha!

Mas notei que as seqüências de quebra de linha que quero manter são protegidas por caracteres de espaço ( 0x20 ), então eu estava pensando em um regex para encontrar e substituir qualquer seqüência 0x0A0x0D sem um espaço à esquerda ou à direita.

Como posso fazer isso?

    
por user394 16.10.2011 / 00:01

2 respostas

1

O regex para um caractere de espaço em branco é, obviamente, \s . No entanto, como você deseja um caractere que não seja espaço em branco, use \S ! Portanto, sua regex para substituição seria \S\n\r\S .

EDITAR:

#!/usr/bin/perl
use strict; use warnings;
my $pattern = "xxxxxxxxxxxxxxxxxxxy\n\ryxxxxxxxxxxxxxxxxxxx \n\r xxxxxxxxxxxxxxxxxxxy\n\ryxxxxxxxxxxxxxxxxxxx";
$pattern =~ s/(\S)(\n\r)(\S)/$1$3/g;
print "$pattern\n";
exit;

resultado:

xxxxxxxxxxxxxxxxxxxyyxxxxxxxxxxxxxxxxxxx 

 xxxxxxxxxxxxxxxxxxxyyxxxxxxxxxxxxxxxxxxx

Eu alterei o regex para substituir por $1$3 , para que você mantenha os caracteres que \S correspondem.

    
por 16.10.2011 / 00:37
0

Aqui está uma maneira com o GNU awk. Defina o separador de registros RS para corresponder aos separadores que você deseja manter e à erva daninha as outras sequências \r\n .

gawk -vRS=' \r\n ' '{gsub(/\r\n/, ""); printf "%s%s", $0, RT}'
    
por 16.10.2011 / 00:40