Como escapar de uma aspa simples? [duplicado]

3

Isso funciona bem:

sed -i 's#    @driver.find_element(:xpath, "//a\[contains(@href,##' temp_spec.rb

contra uma fonte de

@driver.find_element(:xpath, "//a[contains(@href,'change_district')]").click

Acabo de receber:

'change_district')]").click'

mas quando tento adicionar uma cota única no final, ela falha:

sed -i 's#    @driver.find_element(:xpath, "//a\[contains(@href,\'##' temp_spec.rb

syntax error near unexpected token '('

Estou usando \' para escapar da cota única.

Observe que estou usando um # como um delimitador em vez do delimitador normal / , pois há / no texto.

    
por Michael Durrant 15.05.2013 / 22:11

2 respostas

10

As strings entre as aspas simples são usadas literalmente pelo shell (e, portanto, não podem conter outras aspas simples, já que isso seria tratado como o fechamento de um par). Dito isto, você tem várias opções:

  • termine a sequência com aspas simples, adicione escaped (por barra invertida ou aspas duplas) aspas simples e inicie imediatamente a seguinte parte da sua string:

    $ echo 'foo'\''bar' 'foo'"'"'bar'
    foo'bar foo'bar
    
  • use aspas duplas para sua string:

    $ echo "foo'bar"
    foo'bar
    

    isso, claro, significa que você precisa ter cuidado com o que é expandido dentro das aspas duplas pelo seu shell;

  • se você estiver usando utilitários que entendem \xHH ou \x27nnn escaping (o GNU sed faz), você pode usar um desses (ASCII aspas simples está no ponto de código 39 (0x27), por exemplo, %code% ).

por 15.05.2013 / 23:55
1

Esse erro de sintaxe parece estar insinuando a regex sem escape. Eu pessoalmente não uso sed com tanta frequência, mas se bem me lembro, você também precisará escapar de coisas como parênteses (e com barras duplas invertidas se você estiver usando aspas duplas). Aqui está uma lista de possíveis caracteres que você pode precisar para escapar ..

    
por 16.05.2013 / 01:12