使用sed
あなたgrep
から取得した結果、すなわちをトリミングします。
: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="
まで、第二の部分は、すべての" value= ....
を削除しながら。
sed
に複数のサブ置換アクションを連結するには、 ';'で区切ってください。あなたはsedを使用しているいったん
またEDIT2 、グレップを使用する理由はありません、これを試してみてください。
は
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=.*[email protected]@p
}'
)
(これは、不要なプロセスを除去するに入るために良い習慣だそれはないかもしれません。この場合の問題ですが、1時間に1000秒実行されるコードを書いている場所に到達した場合、必要のないときに追加のgrepを持つことは、必要のない余分なプロセスを1000個作成することです)
「<」からエスケープする必要があります。 > '' \ <> 'または最悪の場合' [<] [>]のような文字。
私はsrch-target文字列の '/'文字をエスケープするのを避けるために、reg-ex置換区切り文字として '@'を使用しています。そして私は全体の例でそれを使い続けています。いくつかのsedについては、非標準のセパレータを使用していることを伝えているので、sedコードの各ブロックの先頭に\ @をつけています。
-nは「各行の入力をデフォルトで印刷しない」ことを意味し、そのために最後に 'p'を追加する必要があります。つまり、現在のバッファを印刷することを意味します。
最後に、あなたの正規表現、特に-[a-zA-Z0-9]*
についてはわかりません。これは前の文字(この場合は文字クラス)がゼロ以上あることを意味します。通常、英数字を1文字以上入力したい場合は、-[a-zA-Z0-9][a-zA-Z0-9]*
、またはOR [[:alnum:]][[:alnum:]]*
を使用しますが、私は確かにあなたのデータをよく知っていません。
こちらがお役に立てば幸いです。
@Jazzepi編集を参照してください。この部分文字列を後で別のカール要求を行うために[使用する]方法を示す例を追加しました。がんばろう。 – shellter
パーフェクト!よく働く。ありがとう!また、余分なビットありがとう。私は実際に変数を格納する方法を知っていますが、余計なステップがありがたいです。 – Jazzepi
@Jazzepi喜んで助けた。エディット2は表示されません。 grepは必要ありません(ただし、テストするためのカールの出力がないため、これをテストする方法はありません)。がんばろう。 – shellter