sed和Applescript shell脚本 - 剥离字符串

时间:2010-11-21 15:40:05

标签: sed applescript

我正在尝试在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'

4 个答案:

答案 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'

评论:

  • 将HTML放在引号中或将其转义为属性
  • 使用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

玩得开心! :)