2010-11-21 16 views
1
私はこの文字列を削除するAppleScriptでは、シェルスクリプトでのsedを使用しようとしている

- ?プリント= 1 - <a href="http://myurl.com.html?print=1">my link</a>SEDとAppleScriptをシェルスクリプト - ストリップ文字列

ある変数the_htmlこのHTMLリンクから

これは、エラーがスローされます。

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

は、私が「=」をエスケープする必要がありますか?

編集:今

作品。

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

答えて

1

これを試してみてください:

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

コメント:

  • sedを使用している場合、あなたは一般的にスラッシュを使う
  • プロパティを引用符でHTMLを入れたり、それをエスケープ:「S/A/B/'
1

はい:AppleScriptは= \でエスケープが、全体の文字列をエスケープする働き好きではなかったです。特別な意味を持つ文字をエスケープする必要があります。現在、標準正規表現の特殊文字と、区切り文字として使用している文字があります。したがって、デリミタとして=を使用する場合は、\でエスケープする必要があります。

通常は区切り文字として使用されます。例外は、あなたが/を検索している可能性があるときです。これは、エスケープするすべての表現でかなり狂った読みにくい表現を生成します。あなたが/ 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' 

答えは、はい、あなたが=をエスケープする必要があるのは、expresシオン区切り記号。

+0

ありがとうございますが、私はAppleScriptでシェルスクリプトを使用していますが、AppleScriptは\をエスケープするのが嫌いでした。 – markratledge

0

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 
'?'接頭辞で

:しかし、あなたはURL パラメータを取得したい場合

あり楽しい! :)

関連する問題