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

Regex 如果文本包含特定日期模式,则从文本中获取特定域的URL,regex,bash,shell,sed,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/file

我有一个字符串
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 />]]
因此,我需要的是一个正则表达式,它位于所述日期模式的
[CDATA
]
之间,如果这是今天的日期,则获取域
desiredURL.com
的URL。也许是这样的:

URL = `echo $STRING | sed 'Pattern'`
其中,如果字符串不包含todays date或不包含该域(或两者)的URL,则URL为空。

这将起作用:

DATE=`date +%Y.%m.%d`
DESIRED="desiredURL.com"
URL=`echo ${STRING} | sed -n s"/.*\[CDATA\[\(.*${DATE}.*${DESIRED}.*\)\]\].*/\1/gp"`
echo "URL=${URL}"
在KSH/AIX中(因此管道变量在线路之外工作,sed是POSIX而不是GNU sed)

date+%Y[.]%m[.]%d”|读取日期
echo“desiredURL.com”| sed's/\./[.]/g'| read-r URL
echo“${STRING}”|sed-n”/带有日期${date}/的URL的标题{
/${URL}/s | ^[:blank:][]*
| | p }'

在带有日期的URL标题中保留RegEx char,但这既不检查字符串是否包含todays date,也不过滤所需域的URL。日期是否总是显示在所需域之前?是的,方案总是这样。第一行包含日期,以下几行包含o每个都有一个新的URL。当我用
domain.com
替换
DESIRED
时,这会给出一个
gp:bad substitution
,你也替换了${}吗?谢谢。我应该提到的是,日期周围的字符并不总是我示例中的字符。它们可以更改。你确实可以假设[CDATA[触发器是这样的/^[:blank:]*\可以使用[CDATA\[.*${DATE}/代替
DATE=`date +%Y.%m.%d`
DESIRED="desiredURL.com"
URL=`echo ${STRING} | sed -n s"/.*\[CDATA\[\(.*${DATE}.*${DESIRED}.*\)\]\].*/\1/gp"`
echo "URL=${URL}"
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
   }'