Если вы хотите sed-решение:
$ sed -En 's/(INFO\|NOT-CLONED\|).*\|([^|]*)\|$/\1\2/p' file
INFO|NOT-CLONED|last-folder-name
Как это работает:
-E
Использовать расширенное регулярное выражение
-n
Не печатайте, если мы явно не скажем это.
s/(INFO\|NOT-CLONED\|).*\|([^|]*)\|$/\1\2/p
Найдите строки, которые включают INFO|NOT-CLONED|
(сохраните это в группе 1), затем что-нибудь, .*
, затем |
, за которым следуют любые символы, кроме |
, [^|]*
(сохраненные в группе 2), с последующим |
в конце строки. Текст замены - группа 1, за которой следует группа 2.
Опция p
указывает sed печатать строку, если совпадение выполнено успешно. Поскольку замена выполняется только для строк, содержащих INFO|NOT-CLONED|
, это устраняет необходимость в дополнительном grep
процессе.
Variation: возвращение только имени последней папки
Чтобы просто получить last-folder-name
без INFO|NOT-CLONED
, нам нужно только удалить \1
из вывода:
$ sed -En 's/(INFO\|NOT-CLONED\|).*\|([^|]*)\|$/\2/p' file
last-folder-name
Поскольку нам больше не нужна первая группа захвата, мы могли бы упростить и удалить ненужные теперь парены, чтобы единственной группой захвата было имя последней папки:
$ sed -En 's/INFO\|NOT-CLONED\|.*\|([^|]*)\|$/\1/p' file
last-folder-name