Я посмотрел на страницу справочника и не видел способа сделать это непосредственно через sed
, поскольку я уверен, что Вы сделали перед выяснением. Я вижу несколько способов работать вокруг этого использования grep, но я думаю, что самое легкое является этим:
grep -rlZ "Ms. Johnson" . | xargs -0 sed -i'.bup' -e's/Ms. Johnson/Mrs. Melbin/g'
-r
рекурсивно вызвать
-l
распечатайте имя файла только
-Z
закончите имена пустым указателем
При использовании удара можно также установить pipefail опцию глобально. У меня есть это однажды в начале моих make-файлов, и это фиксирует ошибки даже посреди канала:
# Make sure any errors in the middle of a pipe cause the build to fail
SHELL=/bin/bash -e -o pipefail
(Измененный от/bin/sh до/bin/bash на основе комментария MadScientist)
Если Вы уверены, что Ваш make-файл будет иметь bash
как его оболочка, Вы могли попытаться установить pipefail опцию:
SHELL=bash
.DELETE_ON_ERROR:
foo:
set -o pipefail; false | true > foo
Так как каждая строка правила работает в отдельном экземпляре оболочки, необходимо будет добавить set -o pipefail
к каждой строке Вы хотите применить это к.
Если Вы хотите, чтобы это работало над каким-либо POSIX sh
(и не просто bash
), ответ намного более включен.
PF=set -o pipefail;
после которого можно сделать $(PF) false | true > foo
. номер
– Jander
19.07.2011, 04:41