bash 命令获取特定 class 值下的 href 值

bash command to get href value down a specific class value

我是 shell 脚本的新手,所以我需要一些帮助。通过 shell 脚本,我需要从 class.

过滤的 html 中获取 href 属性 的值

例如:

<a class="other class" href="value I don't need"></a> <a class="some class" href="url I need"></a>

在这种情况下,我需要获得 class "some class" 的标签的 href 值。 我需要将值放入变量中,需要使用 sed 或 grep,我对正则表达式一点都不擅长,所以我需要你的帮助。

这是一种方法:

awk -F'href="' '/class="some class/ {split(,a,"\"");print a[1]}' file
url I need

使用 sedgrep 的替代方法。

var=`grep 'class="some class"' <file> | sed -r 's/^.+href="([^"]+)".+$//'`

首先 grep 找到正确的行,然后 sed 只用括号中的位(即 href 的值)替换整行。

编辑:如果一行中有多个 <a> 标签,它会变得有点棘手。如果你能假设标签的格式总是像例子那样,那么你可以试试这个:

var=`grep 'class="some class"' <file> | sed -r 's/^.+class="some class"\s+href="([^"]+)".+$//'`

如果你不能假设(也许有时 href 出现在 class 之前)那么你最好使用 html 解析器 - 正则表达式不能真正解析 html 正确。

使用grep 'some class'|sed -n 's/.*href="\(.*\)".*//p'

$ cat aaa
<a class="other class" href="value I don't need"></a>
<a class="some class" href="url I need"></a>

$ cat aaa|grep 'some class'|sed -n 's/.*href="\(.*\)".*//p'
url I need