我正在尝试搜索并替换每次出现的
<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'
答案 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中的问题,所以不要担心逃避它们。