Как сопоставить внутренние ссылки с Regex? - PullRequest
1 голос
/ 20 января 2020

Я пытаюсь построить регулярное выражение, которое будет соответствовать каждой строке, в которой нет слова "stylesheet", и имеет "a href", значение которого НЕ начинается с http или 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">

Ответы [ 2 ]

0 голосов
/ 20 января 2020

A perl способ добавления index.html к нужным URL:

~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
0 голосов
/ 20 января 2020

Это регулярное выражение может выполнять работу:

^(.*a href)((?!http|www|stylesheet).)*$
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...