Предыдущие респонденты давали более полные объяснения, чем это, но вот прием, который определенно работает, делая в значительной степени именно то, что он хочет:
$ tail -f <filename>
Покажет конец файла в процессе его записи. Удобно, если вы хотите передать STDERR в файл, но все еще видите его, например, в другом окне терминала.
Решение состоит в том, чтобы дважды использовать подстановку параметров.
Мы начинаем с сохранения пути к каталогу в переменной (, если вы имеете дело с текущим рабочим каталогом, вы можете пропустить это и использовать PWD
вместо p
позже):
$ p=/a/b/c/d/e/c/f/g
Затем мы можем удалить самую длинную строку префикса, соответствующую */c/
, из этой:
$ echo "${p##*/c/}"
f/g
Затем мы понимаем, что если бы этот результат был удален из конца из $p
, мы получили бы желаемый результат:
$ echo "${p%${p##*/c/}}"
/a/b/c/d/e/c/
или, чтобы удалить этот последний /
также:
$ echo "${p%/${p##*/c/}}"
/a/b/c/d/e/c
Замена стандартных параметров ${variable##pattern}
и ${variable%pattern}
удаляет самую длинную совпадающую строку префикса и самую короткую совпадающую строку суффикса соответственно.
(Чтобы получить /a/b/c
, чего вы не хотели, вы должны использовать #
вместо ##
во "внутренней" подстановке)