首页 > 解决方案 > 如何将内部链接与正则表达式匹配?

问题描述

我正在尝试构建一个正则表达式,它将匹配其中不包含单词“ stylesheet”的每一行,并且具有一个“ a href”,其值不是以httpor开头www

这是我走了多远,但它似乎没有做我想要的:

grep -rin "href=\"\/*\/*\/|^((?!stylesheet).)*$" *.html

目标是这将被捕获:

<a href="/api_supplier/">
<a href="/other-internal-link/abc/">

但这不会:

<a href="http://github.com/">
<a href="www.github.com/index.html">
<a href="/other-internal-link/test/" rel="stylesheet">

我的最终目标是index.html在每个内部链接的末尾附加“”,所以它们看起来像这样:

<a href="/api_supplier/index.html">
<a href="/other-internal-link/abc/index.html">

标签: regex

解决方案


index.html附加到正确 url的 perl 方式:

~cat file.txt 
<a href="/api_supplier/">
<a href="/other-internal-link/abc/">

<a href="http://github.com/">
<a href="www.github.com/index.html">
<a href="/other-internal-link/test/" rel="stylesheet">

~perl -ape 's~^(?!.*stylesheet).*?\bhref="/[^"]+\K~index.html~' file.txt 
<a href="/api_supplier/index.html">
<a href="/other-internal-link/abc/index.html">

<a href="http://github.com/">
<a href="www.github.com/index.html">
<a href="/other-internal-link/test/" rel="stylesheet">

如果您想就地更换,请使用以下-i选项:

perl -i -ape 's~^(?!.*stylesheet).*?\bhref="/[^"]+\K~index.html~' file.txt

推荐阅读