【问题标题】:bash command to get href value down a specific class valuebash 命令获取特定类值的 href 值
【发布时间】:2015-03-19 08:02:25
【问题描述】:

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

例如:

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

在这种情况下,我需要获得类“某个类”的 a 标记的 href 值。 我需要将值放入变量中,需要使用 sed o grep,我对正则表达式一点也不擅长,所以我需要你的帮助。

【问题讨论】:

标签: html regex bash sed grep


【解决方案1】:

使用sedgrep 的另一种方法。

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

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

编辑:如果您在一行上有多个&lt;a&gt; 标签,它会变得有点棘手。如果你可以假设标签的格式总是和例子一样,那么你可以试试这个:

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

如果您不能假设(可能有时 href 出现在类之前),那么您最好使用 html 解析器 - 正则表达式无法真正正确解析 html。

【讨论】:

  • 我必须把输入文件放在哪里?
  • 我试过但显示空白结果,输入文件是一个html文件
  • 啊抱歉,它通过空白结果,因为在该行中存在 2 个 标签,这可能会破坏进程?
  • @dakairus 不,这是因为此命令将输出分配给名为 var 的变量,因为在您的问题中您说您需要将其放入变量中。执行完这一行后,执行echo "$var"查看你的变量。
  • @dakairus 虽然实际上,如果您在一行中有两个 &lt;a&gt; 标记,则会导致问题。您不会得到空白结果,但您可能会得到错误的结果,因为第一个 grep 只是找到了该行,而第二个 sed 提取了它看到的第一个 href 属性。
【解决方案2】:

使用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

【讨论】:

    【解决方案3】:

    这是一种方法:

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

    【讨论】:

      猜你喜欢
      • 2016-06-01
      • 1970-01-01
      • 2020-01-22
      • 1970-01-01
      • 1970-01-01
      • 2022-10-17
      • 2021-09-18
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多