如何截断 HTML 链接?

如何截断 HTML 链接?

输入:

<a href="docs/2015-05-foobar/foobar.sh">foobar.sh</a>

输出

<a href="foobar.sh">foobar.sh</a>

问题:如何删除“docs/2015-05-foobar/”?字符串在 " 之间可能会有所不同

答案1

echo '<a href="docs/2015-05-foobar/foobar.sh">foobar.sh</a>' |\
  sed 's/\(.*\)href="\(.*\)\/\(.*\)"\(.*\)/\1href="\3"\4/'

给你:

<a href="foobar.sh">foobar.sh</a>

如果有任何上下文,我只会使用sed适当的 HTML 解析器来查找<a>条目,然后href使用解析器提供的访问方法访问找到的元素。

这些\(.*\)部分匹配任何内容,并且它们匹配的内容可以用\1,\3等回调。其他字符 ( href=", \/, ") 需要匹配(并且斜杠被转义,因为它也用于表示替换模式的开始和结束。匹配是贪婪的,因此\/匹配第二个之前的最后一个斜杠,通过不使用从输出中删除的"匹配部分,正如您想要的那样。\2

答案2

sed

$ echo '<a href="docs/2015-05-foobar/foobar.sh">foobar.sh</a>' |
  sed -e 's,".*/\([^/]*"\),"\1,'
<a href="foobar.sh">foobar.sh</a>

相关内容