我正在尝试在Applescript的shell脚本中使用sed来剥离这个字符串 - ?print = 1 - 来自变量the_html中的这个html链接,即<a href="http://myurl.com.html?print=1">my link</a>
但这会引发错误:
set new_html to do shell script "echo " & quoted form of the_html & " | sed s=?print=1= =g'"
我是否需要逃避“=”?
修改
立即行动。 Applescript不喜欢使用\
转义=但是转义整个字符串有效:
sed 's/?print=1//g'
答案 0 :(得分:1)
是。您需要转义具有特殊含义的字符。现在有标准的正则表达式特殊字符,以及您用作分隔符的字符。因此,如果使用=作为分隔符,则需要使用\。
进行转义通常/用作分隔符。例外情况是你可能正在搜索/,这会产生一些非常疯狂且难以阅读的表达式以及所有的转义。所以,如果你正在搜索/ s,我建议使用不同的角色,否则,坚持/.
要回答当前的问题,您可以逃避=:
sed'= print \ = 1 = = g'
或使用标准斜杠,而不转义=:
sed'/ print = 1 / / g'
答案 1 :(得分:1)
这适用于我的Mac:
echo '<a href="http://myurl.com.html?print=1">my link</a>' | sed 's=?print\=1= =g'
所以答案是肯定的,你确实需要转义=
,因为它被用作表达式分隔符。
答案 2 :(得分:1)
试试这个:
echo '<a href="http://myurl.com.html?print=1">my link</a>' | sed 's/?print=1/ /g'
评论:
sed
时,通常使用斜杠:'s / a / b /'答案 3 :(得分:0)
如果使用'='
或sed
之类的其他'/'
分隔符,则无需转义','
。但是,如果您希望获得URL 参数:
使用'?'
前缀:
echo '<a href="http://myurl.com.html?print=1">my link</a>' \
| sed -e 's,.*\(?.*\)\".*,\1,'
没有'?'
:
echo '<a href="http://myurl.com.html?print=1">my link</a>' \
| sed -e 's,.*?\(.*\)\".*,\1,'
最好也是拆分参数:
$ echo '<a href="http://myurl.com.html?print=1&convert=4">my link</a>' \
| sed -e 's,.*?\(.*\)\".*,\1,' -e 's,&,\n,g'
print=1
convert=4
玩得开心! :)