Se você quiser apenas escapar de todas as aspas e contrabarra, poderá usar
perl -wpe 's/([\"])/\$1/g'
Você também pode usar isso com xclip:
cat myfile | perl -wpe 's/([\"])/\$1/g' | xclip -selection clipboard
Eu tenho um problema estranho que não tenho um bom caminho.
Minha empresa, por motivos, armazena o código de script em uma tabela de banco de dados. Não pergunte. Sempre que eu tenho que inserir uma nova versão do código, eu tenho que percorrer o arquivo e manualmente backslash todas as seqüências para poder executá-lo na minha declaração insert
.
Existe uma ferramenta que irá escapar todas as strings no arquivo para mim, para que eu possa copiar e colar sem ter que fazer este trabalho manual?
O arquivo provavelmente conterá aspas simples e duplas, bem como as aspas entre aspas, ou seja, "this is \"weird\""
.
Veja um exemplo da consulta que estou executando:
delimiter $$
insert into table (code) values ("package a.b.c;
class SomeClass {
var thing = "so \"weird\" and thing's stuff"
}");
Eu não preciso de espaços vazados, nem ponto-e-vírgula, mas qualquer coisa que possa quebrar minhas aspas deve ser evitada. O conteúdo da variável thing
quebraria minhas citações no exemplo dado acima.
Se você quiser apenas escapar de todas as aspas e contrabarra, poderá usar
perl -wpe 's/([\"])/\$1/g'
Você também pode usar isso com xclip:
cat myfile | perl -wpe 's/([\"])/\$1/g' | xclip -selection clipboard
POSIXly você pode escapar com segurança de qualquer string em uma string concatenada para reintroduzir o shell como:
alias "string=$(cat file)"; alias string
alias
irá citar sua saída e incluir (pelo menos) string=
no cabeçalho da string. bash
(em um intervalo com o padrão) também adiciona a string alias
ao cabeçalho da saída. Ainda assim, você pode obter uma versão com citação de eval
de qualquer string como:
string=$(alias "string=$(cat file)"; alias string)
string=${string#*=}
Ou para colocá-lo na sua área de transferência:
<infile sh -c 'alias "c=$(cat)" c' | sed 1s/..// | xsel -bi
bash:
> printf %q "this is \"weird\""
this\ is\ \"weird\"
> printf -v var %q "this is \"weird\""
> echo $var
this\ is\ \"weird\"
O Oracle, o mysql e o sqlite possuem a função quote
. var thing = quote("so \"weird\" and thing's stuff")
pode funcionar.
Parece que o código é transformado de uma maneira. É muito difícil reverter se apenas aspas simples e duplas são escapadas pela barra invertida, porque não saberíamos qual delas remover.
Uma maneira melhor de executar a transformação bidirecional de modo simples e binário de maneira segura é a codificação base64.
echo \'\"\' \"\'\" \
'"' "'" \
echo \'\"\' \"\'\" \ | base64
JyInICInIiBcCg==
echo JyInICInIiBcCg== | base64 -d
'"' "'" \
pode ser compactado para economizar espaço.
wc -c /usr/bin/bashbug
6957
gzip < /usr/bin/bashbug | base64 |wc -c
4094
Tags text-processing sql quoting