Можно сказать GNU sed читать сценарий из стандартного входа с -f -
, -f
значение прочитать сценарий из файла, и -
значение стандартного входа, как распространено с большим количеством команд.
sed -f - "$IN" > "$OUT" << SED_SCRIPT
s/a/1/g
s/test/full/g
SED_SCRIPT
POSIX sed также поддерживает -f
, но использование -
поскольку стандартный вход не документируется. В этом случае Вы могли использовать /dev/stdin
в системах Linux (и я, кажется, вспоминаю, Солярис имеет это также, но я не могу подтвердить это прямо сейчас),
Используя <<-SED_SCRIPT
(с '-' префикс), позволит закрытие SED_SCRIPT
тег, который будет расположен с отступом.
Я не совсем уверен, что Вы делаете, но когда я пробую команду, Вы имеете в своем примере, я получаю следующее:
$ scp /home/saml/projects/Cooks.com\ -\ Recipe\ -\ Coconut\ Chicken.mht \
root@remotey:"/root/some spaced out file.mht"
scp: ambiguous target
Это вызвано тем, что Вы заключаете путь назначения в кавычки, и он также включает обратные косые черты, которые выходят из пробелов. Однако, когда текущая оболочка снимает с двойной кавычки, она также снимет с единственной обратной косой черты, оставляя путь назначения как пустую строку с пробелами. Необходимо сделать одно из следующих для вложения его далее, так, чтобы пробелов правильно оставили:
метод № 1 - двойная кавычка, одинарная кавычка
$ scp /path/with\ spaces/file\ with\ spaces.txt \
user@remotey:"'/home/user/some spaced out file.txt'"
метод № 2 - одинарная кавычка, двойная кавычка
$ scp /path/with\ spaces/file\ with\ spaces.txt \
user@remotey:'"/home/user/some spaced out file.txt"'
метод № 3 - одинарная кавычка, обратная косая черта
$ scp /path/with\ spaces/file\ with\ spaces.txt \
user@remotey:'/home/user/some\ spaced\ out\ file.txt'
метод № 4 - двойная кавычка, обратная косая черта
$ scp /path/with\ spaces/file\ with\ spaces.txt \
user@remotey:"/home/user/some\ spaced\ out\ file.txt"
метод № 5 - утраивает обратные косые черты
$ scp /path/with\ spaces/file\ with\ spaces.txt \
user@remotey:/home/user/some\\\ spaced\\\ out\\\ file.txt
"foo\ bar"
эквивалентно'foo\ bar'
, нет'foo bar'
— обратная косая черта между двойными кавычками только стирается, если она сопровождается\"$
, одинарная левая кавычка или новая строка. – Gilles 'SO- stop being evil' 03.10.2013, 02:56