Вы можете использовать grep
и sed
сделать это:
pax> cat qq.in
/blah: Incorrect key file for table './accounts/headers.MYI'; try blah
/blah: Incorrect key file for table './pax/diablo.myi'; try blah
pax> grep 'Incorrect key file for ' qq.in | sed
-e 's/.*\.\//REPAIR TABLE /g'
-e 's/\//./'
-e 's/\.[Mm][Yy][Ii].*/;/g'
REPAIR TABLE accounts.headers;
REPAIR TABLE pax.diablo;
Обратите внимание, что я положил все эти -e
разделов на разных строках для удобства чтения. Они должны быть на одной линии для тестирования.
Если ваша версия sed
поддерживает поиск без учета регистра (например, GNU), вы можете заменить эту последнюю замену на 's/\.myi.*/;/Ig'
.
Поймать линии с различным foramts немного сложнее и требует, чтобы все форматы, чтобы быть известными, чтобы избежать ложных срабатываний. Следующая команда будет поймать альтернативный формат, поступающую в ваш комментарий:
pax> cat qq.in
/blah: Incorrect key file for table './accounts/headers.MYI'; try blah
/blah: Incorrect key file for table './linus/torvalds.myi'; try blah
/usr/local/mysql/bin/mysqld: Table './beta/search_data' is marked as crashed
[email protected] ~
$ egrep 'Incorrect key|as crashed' qq.in | sed
-e "s/.*\.\//REPAIR TABLE /g"
-e "s/[\\.'].*/;/g"
-e "s/\//./"
REPAIR TABLE accounts.headers;
REPAIR TABLE linus.torvalds;
REPAIR TABLE beta.search_data;
/usr/local/mysql/bin/mysqld: Таблица «./beta/search_data» помечена как разбитая и должна быть исправлена. Ошибка, подобная этой, не генерирует требуемый оператор. Что мне нужно сделать, так это заменить последний '; и удалить все после этого. – shantanuo
] При чтении таблицы получена ошибка 126 ./kumar/headers ' # Другая ошибка, которую необходимо обработать. – shantanuo
@shantanuo, вам нужно _fully_ указать, какие строки вы ищете. У вашей оригинальной спецификации была только форма, содержащая 'Неверный файл ключа для таблицы'. Пока это не будет сделано, никакое решение не может дать вам то, что вы хотите, без возможности ложных срабатываний. – paxdiablo