Для GNU sed
:
$ echo 'href="//noname.com/basil/armada/joke.pdf" href="//noname.com/family/hello.pdf" ' | sed -r '/href/s#//noname.com/(basil/armada|family)#//noname.com/arid#g'
href="//noname.com/arid/joke.pdf" href="//noname.com/arid/hello.pdf"
В этом случае вы можете использовать -E
или -r
.(-E
более совместимо в разных системах)
Также вы забыли basil/
...
Проверьте sed --help
или man sed
для получения дополнительной информации.
Обновите , какПримерно так:
$ echo 'href="//noname.com/basil/armada/joke.pdf" href="//noname.com/family/hello.pdf" ' | sed -r '/href="..noname.com/s#(armada|family)#arid#g'
href="//noname.com/basil/arid/joke.pdf" href="//noname.com/arid/hello.pdf"
Вы можете изменить ..
на \/\/
для точности.
Если вы не хотите сохранять basil
часть ...
Ваша команда в комментарии оставляет только один URL из-за регулярного выражения жадного режим, проверьте это:
$ echo 'href="//noname.com/basil/armada/joke.pdf" href="//noname.com/family/hello.pdf" ' | sed -r '/href/s#href....noname.com/(.*)(armada|family).*#\1#g'
basil/armada/joke.pdf" href="//noname.com/
Вы можете видеть, что .*
фактически захватили сначала basil
до следующего family
.
Итак, нам нужно найтиспособ не допустить, чтобы регулярное выражение было слишком жадным, например:
$ echo 'href="//noname.com/basil/armada/joke.pdf" href="//noname.com/family/hello.pdf" ' | sed -r '/href/s#//noname.com/[^.]*(armada|family)#//noname.com/arid#g'
href="//noname.com/arid/joke.pdf" href="//noname.com/arid/hello.pdf"
* * * * * * * * * [^.]
означает любой символ, который не является .
, в этом случае, чтобы избежать совпадения регулярного выражения с .
до pdf
, как знак остановки.
В других случаях вам может понадобиться найти другой якорь.
Проверьте больше здесь .