如果此文本包含特定日期模式,则从文本中获取特定域的URL

时间:2013-12-10 12:13:42

标签: regex bash shell sed

我有这种形式的字符串STRING

[CDATA[A title for the URLs with a date 2013.12.10 in it<br /><br />

    http://www.foobar.com/foo/bar
    <br />http://bar.com/foo
    <br />http://myurl.com/foo
    <br />http://desiredURL.com/files/ddd
    <br />http://asdasd.com/onefile/g.html
    <br />http://second.com/link
    <br />]]

我需要将第一行中的日期与今天的日期进行比较,如果是true,我想从后续行之一获取特定域的URL。 我在日期行上做了一些解析:

DATE=`date +%Y.%m.%d`
LINEDATE=`echo "$line" | grep  $DATE |   sed -nre 's/^[^0-9]*(([0-9]+\.)*[0-9]+).*/\1/p'`

所以我需要的是一个正则表达式,它在[CDATA]]之间找到Datepattern,如果这是今天的日期,则获取域desiredURL.com的URL。也许是这样的:

URL = `echo $STRING | sed 'Pattern'`

如果字符串不包含今天的日期或者不包含该域的网址(或两者都包含),则URL为空。

2 个答案:

答案 0 :(得分:1)

这将有效:

DATE=`date +%Y.%m.%d`
DESIRED="desiredURL.com"
URL=`echo ${STRING} | sed -n s"/.*\[CDATA\[\(.*${DATE}.*${DESIRED}.*\)\]\].*/\1/gp"`
echo "URL=${URL}"

答案 1 :(得分:1)

在KSH / AIX中(所以管道变量工作在行外面,sed是POSIX而不是GNU sed)

date +"%Y[.]%m[.]%d" | read DATE
echo "desiredURL.com" | sed 's/\./[.]/g' | read -r URL

echo "${STRING}" | sed -n "/A title for the URLs with a date ${DATE}/, {
   /${URL}/ s|^[[:blank:]]*<br />||p
   }'

A title for the URLs with a date

中加入RegEx char