使用sed或awk进行文本提取

时间:2014-12-07 01:30:30

标签: shell sed grep

如何在'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了一个工作命令。

3 个答案:

答案 0 :(得分:1)

首先,如果您的输入是HTML,则应考虑使用HTML解析器。基于正则表达式的工具(如awksed)无法处理任意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