Para negrito uma linha com o regex Perl

1

Eu tenho

1. Lorem
He he he

% not sure spelling
2. Lorem 
ipsun

Eu quero ter

\textbf{1. Lorem}
He he he

% not sure spelling
\textbf{2. Lorem}
ipsun

Minha tentativa de pseudocódigo

perl -000pe 's/\n\n\d./; s/\n\d.\n\textbf\{ /g; s/$/\}/'

que é baseado nas minhas duas perguntas anteriores sobre o regex aqui. Eu tento combinar a coisa que começa com um número. Substitua o início da partida e o final da partida.

O código me dá

Backslash found where operator expected at -e line 1, near "s/\n\n\d./; s/\"
Backslash found where operator expected at -e line 1, near "n\"
Backslash found where operator expected at -e line 1, near "n\"
Backslash found where operator expected at -e line 1, near "textbf\"
Backslash found where operator expected at -e line 1, near "$/\"
    (Missing operator before \?)
syntax error at -e line 1, near "s/\n\n\d./; s/\"
Execution of -e aborted due to compilation errors.

Como você pode negrito o texto fornecido?

    
por Léo Léopold Hertz 준영 05.06.2014 / 18:58

3 respostas

1

Como o -000 transforma cada "parágrafo" em "linha", você pode usar as âncoras de expressões regulares clássicas ( ^ e $ ) para corresponder ao início e ao final de cada "linha". Então, no seu caso, tudo que você precisa é:

$ perl -000pe 's/^(.+)\n/\textbf{$1}\n/;' file 
\textbf{1. Lorem}
He he he

\textbf{2. Lorem }
ipsun

Note que \ precisa ser escapado ( \ ), porque \ é um caractere especial usado para escapar de outros, então você também precisa usá-lo para escapar.

Se você puder fazer comentários como a primeira linha de um parágrafo, essa abordagem falhará e você precisará negrito de todas as linhas que começam com um número:

perl -pe 's/^\d\..+/\textbf{$&}/' file
    
por 05.06.2014 / 19:05
1

Tente isto:

$ perl -ple '$_ = "\textbf{$_}" if /^\d/' cat2
\textbf{1. Lorem}
He he he

\textbf{2. Lorem}
ipsun
    
por 05.06.2014 / 19:04
1

Eu usei a opção -0777 que carrega todo o arquivo na memória de uma só vez. Então, você pode substituir novas linhas:

perl -0777 -pe 's/\n(\d\..*)/\n\textbf{$1}/g'
    
por 05.06.2014 / 19:08