我怎样才能逃脱/和“在我的sed命令中?

时间:2015-08-18 18:43:28

标签: regex bash sed

我正在尝试搜索并替换每次出现的

 <a href="#" data-role="button" data-inline="true" data-rel="back">Cancel</a>

with:

<a data-role="button" data-inline="true" onclick="$(this).closest('[data-role=popup]').popup('close');">Cancel</a>

所以我为此目的使用sed,问题是在我的搜索和替换字符串中它包含/和“我不知道我是否应该逃避它们,所以我不会得到错误。有什么建议吗?

find . -type f -print0 | xargs -0 sed -i 's/<a href="#" data-role="button" data-inline="true" data-rel="back">Cancel</a>/<a data-role="button" data-inline="true" onclick="$(this).closest('[data-role=popup]').popup('close');">Cancel</a>/g'

2 个答案:

答案 0 :(得分:1)

您不必使用斜杠作为sed分隔符。它会使用&#39;之后的任何字符。将它设置为不在数据中的数据,您不必担心转义数据中的斜杠。不要担心双引号:

$ cat x
gand"alf     :0           2015-05-19 14:47 (:0)
gandalf     pts/1        2015-05-27 09:49 (:0)
$ sed 's!pts/1!efs/1!g' x
gand"alf     :0           2015-05-19 14:47 (:0)
gandalf     efs/1        2015-05-27 09:49 (:0)
$ sed 's!gand"alf!efs/1!g' x
efs/1     :0           2015-05-19 14:47 (:0)
gandalf     pts/1        2015-05-27 09:49 (:0)
$ 

答案 1 :(得分:0)

SE网站上的此答案可能会有所帮助:https://unix.stackexchange.com/questions/32907/what-characters-do-i-need-to-escape-when-using-sed-in-a-sh-script

基本上,它说:

  

如果它出现在正则表达式中,你需要一个反斜杠。

我发现的其他资源也证实了这一点,所以我试试看。

答案没有提到任何关于双引号的内容,而且从我在其他地方发现的内容来看,那些似乎不是sed中的问题,所以不要担心逃避它们。