Я понимаю, что этот вопрос уже задавали 100 раз на Stack Overflow. Несмотря на чтение множества вопросов и ответов, я все еще застрял.
Начало: https://website.com/page.html?q=term,tag-one,tag-two,tag-three,15
Цель: https://website.com/page.html,tag-one,tag-two,tag-three,15
Изменить: term
представляет любую строка, включая что-то вроде search% 20term
Это успешно работает в поиске / замене VS Code:
Search: \?.*?,
Replace: ,
Однако при использовании в сценарии Bash это: sed -E 's|\?.*?,|,|'
Результат: https://website.com/page.html,15
Как ни удивительно, но это работает: sed -E 's|#.*?,|,|'
Я думал, что:
s
означает замену - экранирование
\?
сообщает команде найти буквальные вопросительные знаки .*?,
указывает команде захватить любой символ до тех пор, пока первая запятая не дойдет до g
не требуется в команде -E
позволяет sed распознавать больше регулярных выражений, чем -e
Это мое основное c понимание непрофессионала и, вероятно, ошибочное.
Может ли кто-нибудь рассказать мне, что происходит? Спасибо, если да.