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 № 1Outros 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