Как получить доступ к содержимому файла ...
Нет содержимого файла. Или, может быть, лучший способ сформулировать это так: есть содержание . Они не являются (пока) в любом файле .
и имени файла одновременно ...
У вас есть метод получения имени файла с помощью директивы %f
.
Важно помнить, что файл еще не существует . 1 содержимое будет go в этот файл после вы фильтруете их!
Если команда sed
делает то, что вы хотите , оставьте команду sed
как есть. Если вы хотите поместить имя файла куда-нибудь, сделайте это отдельно.
Вот грязный фильтр, который заменяет fill in the blank
пробелами и вставляет имя файла вверху:
#! /bin/sh
# invoked as "smudge %f" from .gitconfig settings
printf "%s\n" "$@"
sed 's/fill in the blank/_________________/'
Вот другой фильтр пятен, который заменяет __myname__
на имя файла:
#! /bin/sh
quoted=$(printf "%s" "$@" | sed -e 's,/,\\/,g' -e 's,&,\\&,g')
sed "s/__myname__/$quoted/"
(Уловка в кавычках заключается в том, чтобы убедиться, что $quoted
не расширяется до символов, которые влияют на команду sed
substitute : forward sla sh - это разделитель, а амперсанд будет заменен левой стороной.)
1 Ну, файл может существовать или не существовать. Это может быть пустым. В вашем случае он, очевидно, существует и в основном или полностью пуст. Здесь существуют различные условия гонки, поскольку фильтрация является частью конвейера, в котором разные процессы выполняют разные задачи.
Обратите внимание, что если вы переключитесь на долгоживущий фильтр, детали изменятся, но общая стратегия будет той же. : отфильтрованный текст еще не находится в целевом файле (ах).