2012-09-11 115 views
3

我需要提取用<strong>標籤包裝的URL。這是一個簡單的正則表達式,但我不知道如何在shell腳本中這樣做。下面是例子:使用正則表達式在shell腳本中從字符串中提取url

line="<strong>http://www.example.com/index.php</strong>" 
url=$(echo $line | sed -n '/strong>(http:\/\/.+)<\/strong/p') 

我需要 「http://www.example.com/index.php」 在$url變量。

使用busybox。

回答

0
url=$(echo $line | sed -n 's!<strong>\(http://[^<]*\)</strong>!\1!p') 
1

這可能會實現:

url=$(echo $line | sed -r 's/<strong>([^<]+)<\/strong>/\1/') 
0

你不必逃避向前反斜槓斜槓。正則表達式中只需要反斜槓。您還應該使用與? -operator的非貪婪匹配,以避免在HTML源代碼中存在多個強標籤時獲取比您想要的更多的內容。

strong>(http://.+?)</strong 
0

更新:如busybox使用ash,該解決方案假設bash功能可能將無法正常工作。有些事只有長一點,但仍然符合POSIX標準將工作:

url=${line#<strong>} # $line minus the initial "<strong>" 
url=${url%</strong>} # Remove the trailing "</strong>" 

如果您正在使用bash(或具有類似特徵的另一個shell),你可以結合擴展模式與參數替換匹配。 (我不知道busybox支持哪些功能。)

# Turn on extended pattern support 
shopt -s extglob 

# ?(\/) matches an optional forward slash; like /? in a regex 
# Expand $line, but remove all occurrances of <strong> or </strong> 
# from the expansion 
url=${line//<?(\/)strong>} 
相關問題