这工作正常:
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,但如果我没记错的话,您还需要转义括号之类的内容(如果使用双引号,则需要转义双反斜杠)。以下是您可能需要转义的可能字符的列表......