sed удаляет косую черту из URL - PullRequest
0 голосов
/ 28 октября 2019

Я пытаюсь использовать sed, чтобы удалить косую черту из URL. Я могу успешно удалить завершающую косую черту, используя следующее (обратите внимание, что это в сценарии сборки в package.json, следовательно, экранирование кавычек и двойной обратной косой черты).

"build": "sed -i -e 's/\\/\"/\"/g' index.html"  

Однако, я боюсь, что это может быть немного чрезмерно усердно, и я хочу убедиться, что это только таргетинг на URL с атрибутом href, но я не уверен, как сделать захват BREURL, но не последний косой черты. В основном я пытаюсь использовать группы захвата для достижения этой цели, но теперь я думаю, что проблема в том, чтобы быть слишком жадным. Я пробовал следующее, но тогда это, похоже, ничего не соответствует:

"build": "sed -i -e 's/href=\"\\(.*\\)*\\/\"/href=\"\\1\"/g' index.html"

Как я могу сделать это.

т.е. так href = "https://example.com/path/foo/bar/"

становится href = "https://example.com/path/foo/bar"

Ответы [ 2 ]

0 голосов
/ 28 октября 2019

sed принимает любой разделитель для команд поиска и замены. Поэтому я рекомендую использовать, например, # вместо косой черты, чтобы не путать разделитель с шаблоном поиска.

Чтобы не быть жадным, исключить кавычки из списка джокеров ([^"]*)

sed 's#href="\([^"]*\)/"#href="\1"#g' yourfile

должен сделать работу

0 голосов
/ 28 октября 2019

Если вы хотите использовать группу захвата с sed, вам необходимо указать параметр -r:

echo 'href="google.nl/"' | sed -r "s#href\=(\"|')([^'\"]*)/(\1)#href=\1\2\1#g"

Страница справочника:

-E,-r, --regexp-extended
использовать расширенные регулярные выражения в скрипте (для переносимости используйте POSIX -E).

Вывод регулярного выражения:

href="google.nl/d" = href="google.nl/d"
href="google.nl"   = href="google.nl"
href="google.nl/"  = href="google.nl"
...