[英]Match & Extract Multi-line Pattern In File
我制作了一個Bash腳本來下載這個頁面http://php.net/downloads.php ,然后搜索最新的PHP文件名,版本和MD5sum。 現在我有它工作但分成兩個不同的sed命令。 當我嘗試將正則表達式放入單個表達式時,它將無法匹配。 我認為這與現有的新線有關。
我如何使用一個單獨的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
這些是來自相關文件的兩行,它需要從以下內容中提取信息:
<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>
sed -nr 's/.*(php-([0-9\.]+)\.tar\.bz2).*/\1 \2/p;s/.*md5: ([0-9a-f]{32}).*/\1/p;T;' downloads.php
這可能適合你(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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.