grep提取指定href遇换行匹配失败,求技术排查与解决
解决HTML跨行提取href的问题
问题根源
grep默认逐行处理文本,当<th>Upstream URL:</th>与后续的<td>标签不在同一行时,你的正则表达式因跨行无法匹配,导致结果为空。
解决方案
以下几种方法都能处理跨行匹配的场景:
- 给grep添加
-z参数(把整个文本当作单行处理)
upstream_url=$(echo "$html_content" | grep -z -oP '<th>Upstream URL:</th>\s*<td><a .*?href="\K[^"]+')
-z会让grep将所有输入内容视为单个连续字符串,忽略换行符的影响,原正则就能正常匹配。
- 使用pcregrep的多行匹配模式
upstream_url=$(echo "$html_content" | pcregrep -oM '<th>Upstream URL:</th>\s*<td><a .*?href="\K[^"]+')
-M参数允许正则表达式跨越多行匹配,-o仅输出匹配到的href内容。
- 用sed定位行范围后提取
upstream_url=$(echo "$html_content" | sed -n '/<th>Upstream URL:<\/th>/,/<\/td>/ s/.*href="\([^"]\+\)".*/\1/p')
先锁定从<th>Upstream URL:</th>到</td>的内容范围,再从中提取href属性值。
内容的提问来源于stack exchange,提问作者MystikReasons
相关产品推荐
相关产品推荐

