Altere as aspas direitas para as aspas inteligentes sem sacrificar a quebra de linha

2

Como alterar as aspas normais para as aspas curvas inteligentes sem omitir a quebra de palavras.

O exemplo contém cotação simples e reta e aspas duplas retas.

ENTRADA

1 I have bowed before only one sanyasi in my life, and that is 'Sri
2 Chandrasekharendra Saraswathi', known to the world as the "Parmacharya."
3 
4 Therefore, I was the ''modern 
5 Indian'',believer in science, and
6 with little concern for spiritual
7 diversions.

OUTPUT

1 I have bowed before only one sanyasi in my life, and that is ‘Sri
2 Chandrasekharendra Saraswathi’, known to the world as the “Parmacharya.”
3 
4 Therefore, I was the “modern 
5 Indian”,believer in science, and with
6 little concern for spiritual 
7 diversions.
    
por Ramaprakasha 07.05.2017 / 09:30

2 respostas

1

Para tornar as novas linhas um não problema, poderíamos fazer uma substituição para que um parágrafo inteiro ou o arquivo inteiro seja processado como uma cadeia. Com Perl, poderíamos usar -0777 para ler o arquivo completo de uma só vez, ou -00 para usar o modo parágrafo (ou seja, seções separadas por linhas vazias, que naturalmente exigiriam que os números de linha não fizessem parte do arquivo de entrada ):

$ perl -0777 -pe 's/\x27\x27/"/g; s/\x27(.*?)\x27/‘$1’/gs; s/"(.*?)"/“$1”/gs; ' input
I have bowed before only one sanyasi in my life, and that is ‘Sri
Chandrasekharendra Saraswathi’, known to the world as the “Parmacharya.”

Therefore, I was the “modern 
Indian”, believer in science, and
with little concern for spiritual
diversions.

Eu usei a representação hexagonal \x27 da aspa simples para facilitar a cotação. .*? significa qualquer string, mas a menor correspondência possível. A primeira regra altera as aspas simples em '' para aspas duplas.

Ou, da mesma forma com o GNU sed, -z usa a entrada como strings separadas por NUL, então um arquivo de texto normal será lido de uma só vez:

$ sed -zEe 's/\x27\x27/"/g; s/\x27([^\x27]*)\x27/‘’/g; s/"([^"]*)"/“”/g; ' input
I have bowed before only one sanyasi in my life, and that is ‘Sri
Chandrasekharendra Saraswathi’, known to the world as the “Parmacharya.”

Therefore, I was the “modern 
Indian”, believer in science, and
with little concern for spiritual
diversions.
    
por 08.05.2017 / 12:49
0

Uma implementação ingênua que depende inteiramente da classe de caracteres de palavras de Perl. Altera apenas ["] para ["] ou ["].

#!/usr/bin/perl -w -0777
local $/ = undef;

open INFILE, $ARGV[0] or die "I can't read the file. $!";
$string =  <INFILE>;
close INFILE;

$string =~ s/(\w)\"/$1”/smg;
$string =~ s/\"(\w)/„$1/smg;

open OUTFILE, ">",   $ARGV[1] or die "I can't write to the file. $!";
print OUTFILE ($string);

close 

Salvar como script.pl e executar perl script.pl INFILE OUTFILE . Depois disso, você só tem que procurar por alguma sobra, citações retas colocadas incorretamente, como | aaaaaa "bbbbb | or | aaaa" bbbb | que esperamos que não sejam muito frequentes.

    
por 12.03.2018 / 19:05