Вопрос по pcre, sed, regex – PCRE regex для sed regex

1

Прежде всего, извините за мой плохой английский. Я'я немецкий парень.

Код, приведенный ниже, прекрасно работает на PHP:

$string = preg_replace('/href="(.*?)(\.|\,)"/i','href="$1"',$string);

Теперь Т нужно то же самое дляsed, Я думал, что это должно быть:

sed 's/href="(.*?)(\.|\,)"/href="{$\1}"/g' test.htm

Но это дает мне эту ошибку:

sed: -e выражение # 1, символ 36: недопустимая ссылка \ 1 на `s ' команда»с RHS

я пытаюсь заменить неправильные URL, которые имеют. или, в конце. так чтоa href = "blubb.de, "> следует заменить на <a href = "blubb.de "> Seblon
Что вы пытаетесь сделать с этим регулярным выражением? Adam Matan
PHP использует Perl-совместимое регулярное выражение (PCRE). Dyno Fu
Можете ли вы уточнить, что выпытаетесь сопоставить и заменить? Я неЯ знаю регулярные выражения PHP так же хорошо, как и Linux. Chowlett

Ваш Ответ

5   ответов
1
sed -e 's|href=\"\(.[^"][^>]*\)\([.,]\)\">|href="\1">|g' file
вот и все. благодарю вас Seblon
0

Вы должны избежать символов выбора блока( а также) следующее.

sed 's/href="\(.*?\)\(.|\,\)"/href="{$\1}"/g' test.htm
0

.", вам нужно избежать этого или использовать его в классе символов. В качестве альтернативы сокращению круглых скобок (что необходимо сделать с базовыми RE), вы можете использовать опцию -E, чтобы указать sed использовать расширенные RE. И наконец, RE, используемые при использовании sed\N ссылаться на подшаблоны, гдеN это цифра.

sed -E "s/href=([\"'])([^\"']*)[.,]\1/href=\1\2\1/i"

Это имеет свою собственную проблему, которая предотвращает совпадение атрибутов href, которые используют оба типа кавычек.

man sed а такжеman re_format даст больше информации о RE, используемых в sed.

В моей версии sed он использует-r указать расширенные регулярные выражения (которые не требуют экранирования скобок) вместо.-E tomlogic
2

на которые вы хотите сослаться, таким образом

sed 's/href="\(.*?\)(.|\,)"/href="{$\1}"/g' test.htm
Безразлично»т работать :( должен заменить. и, в конце URL Seblon
ты несказать, что вы хотите сделать, просто что регулярное выражение не удалось :) user231967
0

оно не префектное, дело только в ситуации с одним лишним "," или же "."


sed -r -e 's/href="([^"]*)([.,]+)"/href="\1"/g' test.htm

Похожие вопросы