0

このページhttp://php.net/downloads.phpをダウンロードする Bash スクリプトを作成し、最新の PHP ファイル名、バージョン、および MD5sum の最初の出現を検索します。現在、動作していますが、2 つの異なる sed コマンドに分割されています。正規表現を単一のものに入れようとすると、一致しません。私はそれが存在する改行に関係していると信じています。
配列 (推奨) またはスペースで区切られた 3 つの一致すべてを取得する 1 つの sed パターンを使用するにはどうすればよいですか。

ところで、それはsedである必要はありません。スクリプトが実行されるシステムが機能する可能性が高いものが欲しいだけなので、たとえばperlはありません。

wget -q http://php.net/downloads.php
FILE_INFO=$(sed -nr "s/.*(php-([0-9\.]+)\.tar\.bz2).*/\1 \2/p;T;q" downloads.php)
MD5SUM=$(sed -nr "s/.*md5: ([0-9a-f]{32}).*/\1/p;T;q" downloads.php)

echo $FILE_INFO
echo $MD5SUM

これらは問題のファイルの 2 行であり、次の情報を抽出する必要があります。

  <a href="/get/php-5.4.5.tar.bz2/from/a/mirror">PHP 5.4.5 (tar.bz2)</a> [10,754Kb] -  19 July 2012<br />
  <span class="md5sum">md5: ffcc7f4dcf2b79d667fe0c110e6cb724</span>
4

2 に答える 2

1
sed -nr 's/.*(php-([0-9\.]+)\.tar\.bz2).*/\1 \2/p;s/.*md5: ([0-9a-f]{32}).*/\1/p;T;' downloads.php
于 2012-08-11T20:52:56.143 に答える
1

これはうまくいくかもしれません(GNU sed):

sed '\|<a href="/get/php|!d;N;s/.*\(php-\([0-9\.]\+\)\.tar\.bz2\).*md5: \([0-9a-f]\{32\}\).*/\1 \2 \3/;q' file
于 2012-08-12T17:48:17.647 に答える