Quero fazer edições contendo metacaracteres. Aqui https://stackoverflow.com/questions/29613304/is-it-possible-to-escape-regex-metacharacters-reliably-with-sed uma das soluções é via perl
with s\Q ... \E
(perto do final da resposta aceita). É mencionado que ele lida com multi-liners, mas:
echo 'a-b' > a.txt;from='-';to='\n';perl -s -0777 -pe 's/\Q$from\E/$to/' -- -from="$from" -to="$to" a.txt
a\nb
echo 'a-b' > a.txt;from='-';to='\n';perl -s -0777 -pe 's/\Q$from\E/\n/' -- -from="$from" -to="$to" a.txt
a
b
Posso substituir por quebra de linha somente se escrever em s
si mesmo, via variável não funciona por algum motivo. Não consegui encontrar uma resposta através da pesquisa na web. Como fazer funcionar com \n
variável?
As variáveis PS podem ter comprimento arbitrário e conter quaisquer metacaracteres, todos os quais devem ser usados literalmente, exceto uma sequência específica de caracteres (por exemplo, \n
) a ser substituída por quebras de linha.
Da maneira correta, o problema não está em
Perl
, mas emshell
:Saída
Acho que descobri uma maneira de fazer isso em duas etapas, pré-processando variáveis com:
Surpreendentemente, isso não funciona para substituição de símbolo único (nova linha), mas funciona para strings mais longas:
Por enquanto, tenho apenas strings mais longas, mas gostaria de saber por que falha em um único símbolo.
Está funcionando ao ler atribuições de variáveis de um arquivo para, assim: