You are here

Скрипт поиска и замены в файлах

Данный скрипт ищет в файлах с именами по заданной маской вхождение и заменяет его на другую последовательность символов.

#!/bin/sh
#permission must be 755!
#Можно положить в Path /usr/local/bin/searchreplace и вызывать searchreplace  'replace this' 'replacement phrase' '*.php'
#Только контроль, без замены: searchreplace  'replace this' 'replacement phrase' '*.php' control
#Получаем параметры из строки
SEARCH=$1
REPLACEMENT=$2
MASK=$3
CONTROL=$4
 
SAVEIFS=$IFS
#Устанавливаем разделитель строк
IFS='
'
if [ "${SEARCH}" = "" ]; then
	echo "Usage: searchreplace  '<replace this>' '<replacement phrase>' 'files mask' [control]"
	echo "e.g.: searchreplace  'replace this' 'replacement phrase' '*.php'"
	CONTROL=1
fi
 
if [ "${CONTROL}" = "control" ]; then
	echo Control of replacing:
	#Заносим список низлежащих файлов в массив
	FILES_LIST=`find . -type f  -name "${MASK}"`
	for FILE in ${FILES_LIST}; do
		echo '  File: '${FILE}
		#cat ${FILE} | sed -e "s/${SEARCH}/${REPLACEMENT}/g" > tmp.tmp
		cat ${FILE} | grep -b ${SEARCH} | sed -e "s/${SEARCH}/${REPLACEMENT}/g" | grep  ${REPLACEMENT}
		#grep -b ${REPLACEMENT} tmp.tmp 
		#rm tmp.tmp
	done
fi
 
if [ "${CONTROL}" = "" ]; then
	rm tmp.tmp
	#Заносим список низлежащих файлов в массив
	FILES_LIST=`find . -type f  -name "${MASK}"`
	for FILE in ${FILES_LIST}; do
		echo '  File: '${FILE}
		cat ${FILE} | sed -e "s/${SEARCH}/${REPLACEMENT}/g" > tmp.tmp
		mv -f tmp.tmp "$FILE"
	done
fi
 
IFS=$SAVEIFS

Опция control позволяет посмотреть, что будет после замены, не затрагивая исходные файлы. Как всегда, кладём в Path, ставим права на выполнение от всех пользователей.

Рубрика: 

Comments

Add new comment

CAPTCHA
Ответьте на простой вопрос, посмотрим, нужны ли нам ваши комментарии…
Image CAPTCHA
Enter the characters shown in the image.