/ / Como posso adicionar caracteres no início e no final de cada linha não vazia em Perl? - regex, perl

Como posso adicionar caracteres no início e no final de cada linha não vazia em Perl? - regex, perl

Eu gostaria de usar isto:

perl -pi -e "s/^(.*)$/"$1",/g" /path/to/your/file

para adicionar "no início da linha e", no finalde cada linha no arquivo de texto. O problema é que algumas linhas são apenas linhas vazias e eu não quero que elas sejam alteradas. Alguma idéia de como modificar o código acima ou talvez fazê-lo de forma completamente diferente?

Respostas:

9 para resposta № 1

Outros já responderam ao problema da sintaxe regex, vamos ver esse estilo.

s/^(.*)$/"$1",/g

Este regex sofre de "síndrome do palito inclinado", onde /// faz o seu cérebro sangrar.

s{^ (.+) $}{ "$1", }x;

Uso de delimitadores balanceados, o modificador / x paraEsvazie as coisas e elimine os backwhacks desnecessários para tornar a regex muito mais fácil de ler. Além disso, o / g é desnecessário, já que esse regex só irá corresponder uma vez por linha.


7 para resposta № 2
perl -pi -e "s/^(.+)$/"$1",/g" /your/file

. * corresponde a 0 ou mais caracteres; + corresponde a 1 ou mais.

Você também pode querer substituir o .+ com .*S.* para garantir que somente as linhas que contêm um caractere que não seja espaço em branco sejam citadas.


4 para resposta № 3

mudar. * para. +

Em outras palavras, as linhas devem conter 1 ou mais caracteres. . * representa zero ou mais caracteres.


4 para resposta № 4

Você deve ser capaz de simplesmente substituir o * (0 ou mais) com um + (1 ou mais), assim:

perl -pi -e "s/^(.+)$/"$1",/g" /path/to/your/file

4 para a resposta № 5

tudo o que você está fazendo é adicionar algo à frente e atrás da linha, portanto não há necessidade de regex. Basta imprimi-los. Regex para tal tarefa é caro se o seu arquivo for grande.

gawk

$ awk "NF{print "42" $0 "42,"}" file

ou Perl

$ perl -ne "chomp;print "42$_42,n" if ($_ ne "") " file

3 para resposta № 6
sed -r "s/(.+)/"1"/" /path/to/your/file