2010-11-21 271 views
1

我試圖用sed在AppleScript的shell腳本剝奪這個字符串 - 打印= 1 - 從變量the_html這個網站的鏈接,這是<a href="http://myurl.com.html?print=1">my link</a>SED和AppleScript shell腳本 - 帶字符串

但這會引發錯誤:

set new_html to do shell script "echo " & quoted form of the_html & " | sed s=?print=1= =g'" 

我需要轉義「=」嗎?

編輯:

現在工程。 AppleScript的不喜歡的=用\逃脫,但逃脫整個字符串的工作原理:

sed 's/?print=1//g' 

回答

1

試試這個:

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

評論:

  • 加上引號的HTML或逃避它財產
  • 使用sed,您通常使用斜線:「S/A/B/'
1

是。你需要逃避具有特殊含義的角色。現在有標準的正則表達式特殊字符,以及您用作分隔符的字符。因此,如果您使用=作爲分隔符,則需要使用\轉義它。

通常/用作分隔符。例外的情況是,你可能正在搜索/,這會產生一些非常瘋狂和難以閱讀的表達式,所有的轉義。所以如果你在搜索/ s,我會建議使用不同的角色,否則,堅持/。

要回答這個直接的問題,你可能會逃脫=:

sed '=print\=1= =g'

或使用標準的斜線,沒有逃避=:

sed '/print=1/ /g'

1

此工程在我的Mac:

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

所以答案是,是的,你需要逃避=,因爲它使用表達式錫永定界符。

+0

謝謝,但我忽略了提醒,我在Applescript中使用shell腳本,並且Applescript不喜歡\以逃避=。 – markratledge 2010-11-21 19:31:42

0

如果使用另一個,則不需要轉義分離器,如'/'','。但是,如果你想獲得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 

有好玩! :)