代码之家  ›  专栏  ›  技术社区  ›  markratledge

sed和Applescript shell脚本-strip字符串

  •  1
  • markratledge  · 技术社区  · 14 年前

    我试图在Applescript的shell脚本中使用sed来删除这个字符串-?print=1-从变量中的这个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 回复  |  直到 14 年前
        1
  •  1
  •   icyrock.com    14 年前

    试试这个:

    echo '<a href="http://myurl.com.html?print=1">my link</a>' | sed 's/?print=1/ /g'
    

    评论:

    • 将HTML置于引号中或转义它属性
    • 使用时 sed ,通常使用斜杠:“s/a/b/”
        2
  •  1
  •   Klaus Byskov Pedersen    14 年前

    这在我的Mac上有效:

    echo '<a href="http://myurl.com.html?print=1">my link</a>' | sed 's=?print\=1= =g'
    

    所以答案是,是的,你确实需要逃避 = 因为它是一个表达式分隔符。

        3
  •  1
  •   Dennis Williamson    14 年前

    对。你需要转义那些有特殊意义的字符。现在有了标准正则表达式特殊字符,以及用作分隔符的字符。因此,如果使用=作为分隔符,则需要使用\对其进行转义。

    通常/用作分隔符。例外情况是,当您可能正在搜索/时,会生成一些非常疯狂且难以读取的表达式,其中包含所有转义。因此,如果您正在搜索/s,我建议您使用不同的字符,否则,请坚持使用/。

    要回答眼前的问题,您可以避开=:

    sed'=打印\=1==g'

    或者使用标准斜杠,而不转义为:

    sed'/print=1//g'

        4
  •  0
  •   levif    14 年前

    你不需要逃跑 '=' 如果使用另一个 sed 类似分隔符 '/' ',' . 但是如果你想得到网址 参数 :

    '?' 前缀:

     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
    

    玩得高兴!:)