Замена текста:
Способ 1: Замена подстроки с помощью perl
:
perl -e 's/foo/bar/g' -pi ./index.html
Способ 2: Замена с помощью sed
:
sed -e 's/foo/bar/g' ./index.html > index_new.html
Способ 3: Замена с помощью awk
awk '{gsub("foo", "bar", $0); print > FILENAME}' ./index.html
Полезные функции для работы с файлами:
dos2unix() {
sed -i '' -e 's/'"$(printf '\015')"'$//g' "$2"
}
unix2dos() {
sed -i '' -e 's|$|'"$(printf '\015')"'|g' "$2"
}
delete_BOM() {
#awk '{sub(/^\xEF\xBB\xBF/,"",$0); print > FILENAME}' "$1"
awk '{sub(/^\xEF\xBB\xBF/,"",$0); print}' "$1" >> "${1}.awkbak"
mv "${1}.awkbak" "$1"
}
#По 1 файлу
dos2unix -o russian.php
delete_BOM russian.php
# Найти и обработать все *.tpl и *.php файлы от текущего каталога.
for i in $(find . -type f \( -name '*.tpl' -o -name '*.php' \) -print); do
echo 'Working: '$i'...'
dos2unix -o $i
delete_BOM $i
done
dos2unix -o
для обратной совместимости с одноименной консольной утилитой /usr/ports/converters/unix2dos
,
но зачем засорять систему лишними пакетами, если можно обойтись встроенными средствами?
P.S. Если кто-то подскажет более изящное решение на awk
, sed
или еще чем-то, что идет штатно во FreeBSD для удаления BOM, буду только рад :)
Варианты с perl
не предлагать, они очевидны и не интересны :)
Первый вариант с awk
почему-то не работает, часть файла теряется.
FreeBSD Подсказывает в motd
вариант на sed
:
sed -e '1s/^\xef\xbb\xbf//' < bomfile > newfile
Comments
comments powered by Disqus