我有这种形式的字符串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为空。
答案 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