Относительно команды в ваш ответ :
sed -E 's@^[^<]?(https?://(www\.)?[-a-zA-Z0-9@:%._\+~#=]{1,256}\.[a-zA-Z0-9()]{1,6}\b([-a-zA-Z0-9()@:%_\+.~#?&=]*))[^>]?$@<\1>@gm;t'
Вот несколько примечаний:
Ваш опубликованный образец ввода имеет 1 URL-адрес на строку, поэтому НАЖМИТЕ gm;t
в конце вашей команды sed не делает ничего полезного, поэтому либо ваш ввод неадекватен, либо ваш сценарий неверен.
Жестко заданные диапазоны a-z
, A-Z
и 0-9
включают разные персонажи в разных регионах. Если вы хотели включить все (и только) строчные буквы, прописные буквы и цифры, вам следует заменить a-zA-Z0-9
на класс символов POSIX [:alnum:]
. Поэтому либо измените, чтобы использовать класс символов, не зависящий от языкового стандарта, либо укажите нужный языковой стандарт в командной строке, в зависимости от ваших требований, какие символы должны соответствовать в вашем регулярном выражении.
Как и большинство символов, символ +
является литерал внутри выражения в квадратных скобках, поэтому его не следует экранировать - замените \+
на +
.
Выражение в скобках [^<]?
означает «1 или 0 вхождений любого символа, кроме * 1024. * "и аналогично для [^>]?
, поэтому, если ваш« url »содержит случайные символы в начале / конце, он будет принят, например:
echo 'xhttp://foo.bar%' | sed -E 's@^[^<]?(https?://(www\.)?[-a-zA-Z0-9@:%._\+~#=]{1,256}\.[a-zA-Z0-9()]{1,6}\b([-a-zA-Z0-9()@:%_\+.~#?&=]*))[^>]?$@<\1>@gm;t'
<http://foo.bar%>
I думаю, вы имели в виду используйте <?
и >?
вместо [^<]?
и [^>]?
.
Ваше регулярное выражение позволит использовать «url» без букв:
echo 'http://=.9' | gsed -E 's@^[^<]?(https?://(www\.)?[-a-zA-Z0-9@:%._\+~#=]{1,256}\.[a-zA-Z0-9()]{1,6}\b([-a-zA-Z0-9()@:%_\+.~#?&=]*))[^>]?$@<\1>@gm;t'
<http://=.9>
Если вы отредактируете свой вопрос, чтобы предоставить более действительно репрезентативный ввод образца и ожидаемый результат (включая случаи, когда вы не хотите сопоставить), тогда мы можем помочь вам, НО на основе быстрого поиска в Google того, какой действительный URL-адрес выглядит так, как будто существует несколько l действительные URL-адреса, которые будут запрещены вашим регулярным выражением, и несколько недопустимых, которые будут разрешены, поэтому вы можете спросить об этом в вопросе с тегом url
или аналогичным (с тегами, которые у вас есть в настоящее время, мы можем помочь вам реализовать ваше регулярное выражение, но могут быть люди получше, которые помогут с определением вашего регулярного выражения).