Одно предложение:
x='Lorem ipsum dolor sit amet, consectetur '\
'adipiscing elit, sed do eiusmod tempor '\
'incididunt ut labore et dolore magna aliqua.'
Что приводит к ожидаемому:
$ printf '%s\n' "$x"
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.
s?.*users/[^/]\+/??
разбивается следующим образом:
s
— команда подстановки?
(все три из них )являются разделителями выражений (поэтому приведенное выше может выглядеть так же:s@.*users/[^/]\+/@@
). Общая форма такова:s/<match pattern>/<replacement>/<modifiers>
. В этом случае в этой подстановке нет ни модификаторов, ни замены, поэтому все, что найдено по первому шаблону, будет удалено из потока. .*users/[^/]\+/
является шаблоном поиска и означает:
.*
все, что предшествуетusers/
[^/]\+/
за которым следует что-то, что не является\
(по крайней мере одним таким, возможно, больше )и за этим следует один /
. Таким образом, он нацелен на строку в пути, который начинается с users
и сопровождается одной подпапкой, например. /subfolder/
.
И вот что осталось:
SAm/VELOCE/ML3P8/trunk
А вот и удаленная часть:
/proj/SAM1/users/ssudi/
/proj/SAM1/
предшествовало users/
, а затем последовало ssudi
.