sed
から取得した結果をトリミングするために使用しますgrep
。
edit : myID 変数を追加しました。好きな名前を使用してください。
myID=$(
curl http://www.drupalwebsite.org/?q=user \
| grep '<input type="hidden" name="form_build_id" id="form-[a-zA-Z0-9]*" value="form-[a-zA-Z0-9]*" />' \
| sed 's/^.* id="//;s/" value=.*$//'
)
#use ${myID} later in script
printf "myID=${myID}\n"
最初の部分は、文字列の「前」部分 ( までのすべてid="
) を削除し、2 番目の部分はすべての を削除します" value= ....
。
sed
「;」で区切ることにより、複数のサブ置換アクションを連鎖させることができることに注意してください。
edit2
また、sed を使用している場合は、grep を使用する理由はありません。これを試してください。
myID=$(
curl http://www.drupalwebsite.org/?q=user \
| sed -n '\@<input type="hidden" name="form_build_id" id="form-[a-zA-Z0-9]*" value="form-[a-zA-Z0-9]*" />@{
s\@^.* id="@@
s\@" value=.*$@@p
}'
)
(不要なプロセスを削除するのは良い習慣です。この場合は問題にならないかもしれませんが、1 時間に何千回も実行されるコードを記述している場合は、実行しないときに余分な grep が必要です。作成する必要のない何千もの余分なプロセスを作成する必要はありません。)
「\< >」または最悪の場合「[<] [>]」のような「< および >」文字をエスケープする必要がある場合があります。
srch-target 文字列内の「/」文字をエスケープする必要がないように、正規表現の置換セパレータとして「@」を使用しています。そして、一貫性を保つために、例全体で引き続き使用しています。一部の sed では、非標準のセパレーターを使用していることを伝えているため、sed コードの各ブロックの先頭に \@ があります。
-n は、「入力の各行をデフォルトで出力しない」ことを意味します。そのため、最後に「p」を追加する必要があります。これは、現在のバッファーを出力することを意味します。
最後に、正規表現、特に についてはわかりません-[a-zA-Z0-9]*
。これは、前の文字 (またはこの場合は文字クラス) が 0 個以上であることを意味します。通常、少なくとも1つの英数字が必要な人は-[a-zA-Z0-9][a-zA-Z0-9]*
、 , yes ORを使用[[:alnum:]][[:alnum:]]*
しますが、確かに言えるほどあなたのデータをよく知りません.
これが役立つことを願っています。