Это может работать для вас (GNU sed):
sed -n 's#^package:\(.*\)/.*#\1#p' file
Поскольку это может быть операция фильтрации, используйте параметр -n
для явной печати результатов. Регулярное выражение начинается с ^
в команде замещения, которая привязывает package:
к началу строки и использует .*
для жадного использования оставшейся части строки. Однако следующий символ, который он пытается найти, это /
, и поэтому механизм регулярных выражений возвращает его назад, а затем следующий .*
снова поглощает оставшуюся часть строки. Процитированные в кавычки \(...\)
фиксируют эту часть регулярного выражения, и она представлена в RHS команды замены вместо \1
, известной как обратная ссылка. Флаг p
в конце команды замены явно печатает исправленную строку в ее текущем состоянии.
NB. Что с командой замены, программист может выбрать ее разделитель. В документации команда обычно пишется s/LHS/RHS/flags
, где разделитель равен /
, но может быть любым символом, как в приведенном выше решении #
было выбрано, чтобы уменьшить необходимость в цитировании символа /
, LHS = regexp наслева, RHS = замена и флаги = дополнительные операции, такие как g
, означающие глобальное замещение по всей строке / файле, и p
, означающие печать строки в ее текущем состоянии после успешной замены (другие см. в документации по sed.