如何转义单引号?

如何转义单引号?

这工作正常:

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

针对某个来源

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

我只剩下:

'change_district')]").click`

但是当我尝试在末尾添加单引号时,它失败了:

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

syntax error near unexpected token `('

我用来\'转义单引号。

请注意,我使用 a#作为分隔符,而不是文本中的普通/分隔符。/

答案1

单引号内的字符串由 shell 逐字使用(因此不能包含其他单引号,因为它将被视为一对中的结束单引号)。也就是说,您有多种选择:

  • 结束单引号字符串,添加转义(通过反斜杠或双引号)单引号,并立即开始字符串的以下部分:

    $ echo 'foo'\''bar' 'foo'"'"'bar'
    foo'bar foo'bar
    
  • 对字符串使用双引号:

    $ echo "foo'bar"
    foo'bar
    

    这当然意味着您必须小心 shell 在双引号内扩展的内容;

  • 如果您使用的是能够理解\xHH\0nnn转义的实用程序(GNU sed 可以),您可以使用其中之一(ASCII 单引号位于代码点 39 (0x27),因此例如\x27)。

答案2

该语法错误似乎暗示未转义的正则表达式。我个人不经常使用 sed,但如果我没记错的话,您还需要转义括号之类的内容(如果使用双引号,则需要转义双反斜杠)。以下是您可能需要转义的可能字符的列表......

相关内容