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
}'