繁体   English   中英

在文件中匹配和提取多行模式

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM