Форум сайта python.su
857
Это любой регистр при поиске содержимого и замене и исключение директорий:
get_paths()
{
find "$1" 2>/dev/null
}
paths_filter_files()
{
while read line; do
[ -f "$line" ] && echo "$line"
done
}
files_filter_exts()
{
local exts=${1//|/\\|}
grep '\.\('"$exts"'\)$'
}
exclude_dirs()
{
local dirs=${1//|/\\|}
grep -v '/'"$dirs"'/'
}
search_exts_in_directory()
{
local dir=$1
local exts=$2
get_paths "$dir" | paths_filter_files | files_filter_exts "$exts"
}
files_filter_by_content_icase()
{
local contents=${1//|/\\|}
while read line; do
grep -q -i "$contents" "$line" 2>/dev/null && echo "$line"
done
}
ymd()
{
date '+%Y-%m-%d'
}
make_backup_name()
{
sed 's/$/'".$(ymd).backup"'/'
}
make_backup()
{
local src=$1
local dst=$2
while [ -e "$dst" ]; do
dst="${dst}_"
done
cp "$src" "$dst"
}
replace_in_file_icase()
{
local fname=$1
local pat=$2
local rep=$3
sed -i 's/'"$pat"'/'"$rep"'/ig' "$fname"
}
convert_with_backup()
{
local pattern=${1//|/\\|}
local replacement=$2
local backup_name
while read line; do
backup_name=$(echo "$line" | make_backup_name)
make_backup "$line" "$backup_name"
replace_in_file_icase "$line" "$pattern" "$replacement"
echo "$line"
done
}
main()
{
search_exts_in_directory /tmp/test "txt|xml" | \
exclude_dirs "dir1|dir2" | \
files_filter_by_content_icase "user|server" | \
convert_with_backup "test1|test2" "testtest" >/dev/null
}
main
AversusНадо передавать регулярное выражение
-Конечно бывают ситуации когда есть записи вида cpp@poddomen.mycompamy1.com - естественно скрипт его не обработает.
convert_with_backup "@[^ ]*mycompany[12]\.com" "@mycompany3.com"
Отредактировано py.user.next (Май 15, 2017 18:01:36)
Офлайн