URL: https://www.opennet.me/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID1
Нить номер: 89425
[ Назад ]

Исходное сообщение
"Помогите с GREP"

Отправлено SeraV , 22-Июл-10 11:00 
Доброе время суток.
Проблема такая: есть база большая порядка 800 таблиц почти каждая таблица до 150м, база начала переодически падать, написал скриптец

passwd_root_mysql='123'
mysql_cmd='/usr/bin/mysqlcheck'
mysql_='/usr/bin/mysql'
name_base='base'
$mysql_cmd -u root --password=${passwd_root_mysql} -a --auto-repair ${name_base}

интервал запуска 5 минут, но есть одно большое но, даный скрипт шарит всю базу, мне етого не нужно так как у меня каждый день создается своя таблица например "o2010х22x7" "r2010х22x7" "q2010х22x7" и таких таблиц много
мне нужно чтобы мой скрипт проверял только текущие таблицы + основные
написал вот так

echo show tables | ${mysql_} -u root --password=${passwd_root_mysql} ${name_base} | \
  grep -v '^[оrq]2' | \
  xargs $mysql_cmd -u root --password=${passwd_root_mysql} -a --auto-repair ${name_base} $1

но теперь отсекаются таблицы с початком "о2" "r2" "q2", но мне нужно чтобы еще проверялись и "o2010х22x7" "r2010х22x7" "q2010х22x7"

подскажите что нужно дописать  


Содержание

Сообщения в этом обсуждении
"Помогите с GREP"
Отправлено ДорогойДрук , 22-Июл-10 12:11 
>  grep -v '^[оrq]2' | \
>теперь отсекаются таблицы с початком "о2" "r2" "q2", но мне нужно
>чтобы еще проверялись и "o2010х22x7" "r2010х22x7" "q2010х22x7"

А разве нужно писать не так?

grep '^[оrq][[:digit:]]\{4\}х[[:digit:]]\{2\}х[[:digit:]]'


"Помогите с GREP"
Отправлено аноним , 22-Июл-10 13:45 
>>  grep -v '^[оrq]2' | \
>>теперь отсекаются таблицы с початком "о2" "r2" "q2", но мне нужно
>>чтобы еще проверялись и "o2010х22x7" "r2010х22x7" "q2010х22x7"
>
>А разве нужно писать не так?
>
>grep '^[оrq][[:digit:]]\{4\}х[[:digit:]]\{2\}х[[:digit:]]'

можно и так (perl-like regexp, нужно проверить, доступна ли такая опция):

grep -eP '^[orq]2\w+'


"Помогите с GREP"
Отправлено DogEater , 22-Июл-10 22:40 
>>  grep -v '^[оrq]2' | \
>>теперь отсекаются таблицы с початком "о2" "r2" "q2", но мне нужно
>>чтобы еще проверялись и "o2010х22x7" "r2010х22x7" "q2010х22x7"
>
>А разве нужно писать не так?
>
>grep '^[оrq][[:digit:]]\{4\}х[[:digit:]]\{2\}х[[:digit:]]'

а разве этот шаблон будет работать без опции -e ?


"Помогите с GREP"
Отправлено SeraV , 22-Июл-10 17:54 
наверное я неправельно написал.
например есть таблицы: "o2010х18x7" "o2010х19x7" "o2010х20x7" "o2010х21x7" "o2010х22x7" "r2010х18x7" "r2010х19x7" "r2010х20x7" "r2010х21x7" "r2010х22x7" "q2010х18x7" "q2010х19x7" "q2010х20x7" "q2010х21x7" "q2010х22x7" + еще с разними названиями, нужно чтобы проверились те что с разными названиями и "o2010х22x7" "r2010х22x7" "q2010х22x7" а остальные ненужны, даная команда   grep -v '^[оrq]2' отсекает все таблицы которые начинаются на "о2" "r2" "q2" , а если еще дописать grep 'o2010х22x7' | grep 'r2010х22x7' | grep 'q2010х22x7' вообще перестает работать


"Помогите с GREP"
Отправлено ДорогойДрук , 22-Июл-10 22:22 
В консольке знак | не означает ИЛИ
Вы таки не проверили предложенный вариант.


"Помогите с GREP"
Отправлено DogEater , 22-Июл-10 22:35 
>наверное я неправельно написал.
>например есть таблицы: "o2010х18x7" "o2010х19x7" "o2010х20x7" "o2010х21x7" "o2010х22x7" "r2010х18x7" "r2010х19x7" "r2010х20x7" "r2010х21x7"
>"r2010х22x7" "q2010х18x7" "q2010х19x7" "q2010х20x7" "q2010х21x7" "q2010х22x7" + еще с разними названиями,
>нужно чтобы проверились те что с разными названиями и "o2010х22x7" "r2010х22x7"
>"q2010х22x7" а остальные ненужны, даная команда   grep -v '^[оrq]2'
>отсекает все таблицы которые начинаются на "о2" "r2" "q2" , а
>если еще дописать grep 'o2010х22x7' | grep 'r2010х22x7' | grep 'q2010х22x7'
>вообще перестает работать

всё правильно, потому что любой шаблон из дописанного совпадает с тем что ты использовал в grep -v


вот тебе простейший рабочий вариант:
grep -e "[orq]2010.*x7"

точнее так:
grep -P "[orq]2010x\d{2}x7"
но с pcre меня отчего то grep послал нах, видимо это от жары, ну да ладно, тебе и первого хватит


"Помогите с GREP"
Отправлено SeraV , 22-Июл-10 23:12 
разобрался кому интересно вот пример

#!/bin/sh
passwd_root_mysql='123'
mysql_cmd='/usr/bin/mysql'
mysqlcheck_cmd='/usr/bin/mysqlcheck'
name_base='base'

d_y=`date "+%Y"`
d_m="`date +%m | sed 's%^0%%'`"
d_d="`date +%d | sed 's%^0%%'`"
tbl=${d_y}x${d_m}x${d_d}
echo show tables | ${mysql_cmd} -u root --password=${passwd_root_mysql} ${name_base} | \
  grep -v '^[orq]2' | grep -v '^Tables' | \
  xargs ${mysqlcheck_cmd} -u root --password=${passwd_root_mysql} -a --auto-repair ${name_base} $1 o${tbl} r${tbl} q${tbl}

Всем спасибо
вопрос закрыт