如何在'title =“Id:'和'''字符串之间提取文本。
我的剧本:
#! /bin/sh
S='<TD WIDTH="15%"><a title="Id: A LA UNE HD" class="A3"></a></TD>'
fn_ExtractData() {
local DataField="$(printf %s "$1" | sed -n -e '/'"$2"'/,/'"$3"'/p')"
#local DataField="$(printf %s "$1" | grep -oP '(?<='"$2"').*?(?='"$3"')')"
printf '%s' "$DataField"
}
ptr1='title="Id: '
ptr2='"'
rslt="$(fn_ExtractData "$S" "$ptr1" "$ptr2")"
echo "$rslt"
exit
预期输出:
A LA UNE HD
没有前导或尾随空格。
最诚挚的问候。 PS。我已经使用grep了一个工作命令。
答案 0 :(得分:1)
首先,如果您的输入是HTML,则应考虑使用HTML解析器。基于正则表达式的工具(如awk
和sed
)无法处理任意HTML。
但在您的特定示例中,这将起作用:
sed -ne 's/^.*title="Id: \([^"]*\)".*$/\1/p`
答案 1 :(得分:1)
在你的代码中,grep有-Po
选项,所以你可以直接用grep获得结果
S='<TD WIDTH="15%"><a title="Id: A LA UNE HD" class="A3"></a></TD>'
grep -Po 'title="Id: \K[^"]+' <<< "$S"
如果您不喜欢\K
选项:
grep -Po '(?<=title="Id: )[^"]*' <<< "$S"
答案 2 :(得分:0)
以下是awk
awk -F'title="Id: ' '{split($2,a,"\"");print a[1]}' <<< "$S"
A LA UNE HD