输入:
<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>