bash命令将href值降低到特定的类值

时间:2015-01-20 22:37:45

标签: html regex bash sed grep

我是shell脚本的新手,所以我需要一些帮助。通过shell脚本,我需要从类过滤的html中获取href属性的值。

例如:

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

在这种情况下,我需要一个标签的href值,使得类“某些类”。 我需要将值放入变量中,需要使用sed o grep,我对reggex不好,所以我需要你的帮助plz。

3 个答案:

答案 0 :(得分:0)

这是一种方式:

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

答案 1 :(得分:0)

使用sedgrep的另一种方式。

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

第一个grep找到正确的行,然后sed用仅包含bractted的位(这是href的值)替换整行。

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

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

如果你不能假设(也许有时href来自课程之前)那么你最好使用html解析器 - 正则表达式无法正确解析html。

答案 2 :(得分:0)

使用grep 'some class'|sed -n 's/.*href="\(.*\)".*/\1/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="\(.*\)".*/\1/p'
url I need