Во-первых, grep
: Можно сказать, что это для не поиска двоичных файлов - использует -I
переключатель - как страница справочника говорит:
-I Process a binary file as if it did not contain matching data; this is equivalent to the --binary-files=without-match option.
Во-вторых, find
: Для избегания использования xargs и большой передачи по каналу используйте -exec
тест find
программа. Можно легко создать цепочку логических тестов с помощью этого: каждый последовательный -exec
выполняется, если все предыдущие команды возвратились 0 (законченный успешно).
В первую очередь, необходимо закончить -exec
действие с {} \;
.
Во-вторых, awk
не изменяйте файл на месте как sed
сделайте (с -i
опция), таким образом, необходимо отправить вывод во временный файл, затем перемещают это в исходный файл.
Создайте сценарий (скажите, что мы называем его replace
) со следующим содержанием:
#!/bin/sh
tfile=$(mktemp)
awk '/<!-- STARTREPLACE1 -->/{p=1;print;print "A whole new world!"}
/<!-- ENDREPLACE1 -->/ {p=0}' "$1" >"$tfile" && \
mv "$tfile" "$1"
дайте ему исполняемые полномочия
chmod +x ./replace
затем выполненный
find "$DIR" -type f -iname '*.html' -exec ./replace {} \;
И для премии:
gawk '{!p} /<!-- STARTREPLACE1 -->/{print "A whole new world!";p=1}/<!-- ENDREPLACE1 -->/{p=0}'
/ {p=0}'
заменяется/{p=0}!p'
. Еще раз спасибо так для кода! – Questioner 02.04.2012, 18:55