Shell 一行中的两个变量

Shell 一行中的两个变量,shell,sed,awk,Shell,Sed,Awk,损坏的表条目记录在错误文件中,如下所示 ; REPAIR TABLE kumar.headers;; try to repair it ; REPAIR TABLE raju.headers;; try to repair it /usr/local/mysql/bin/mysqld:不正确 表的键文件 “./accounts/headers.MYI”;尝试 修理它 我想写一个查询来修复这个表 修复表accounts.headers 我需要做的是搜索“/”的第一个实例,然后选择第一个单词,即“

损坏的表条目记录在错误文件中,如下所示

; REPAIR TABLE kumar.headers;; try to repair it
; REPAIR TABLE raju.headers;; try to repair it
/usr/local/mysql/bin/mysqld:不正确 表的键文件 “./accounts/headers.MYI”;尝试 修理它

我想写一个查询来修复这个表

修复表accounts.headers

我需要做的是搜索“/”的第一个实例,然后选择第一个单词,即“accounts”,然后选择下一个单词“headers”。 现在使用这两个变量来编写一条语句,如上图所示。
我应该为此编写Shell脚本吗?

您可以使用
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版本一样),您可以用
的/\.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

allachan@IBM-L3F3936 ~
$ 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;

下面是我期望它做的事情。但我对它不太满意,我想知道更好的解决办法

awk -F"'./" '{print $2}' | replace "'" ';' | replace "/" "." | replace '.MYI' '' | sed 's/^/; REPAIR TABLE /'
它将输出这样的语句

; REPAIR TABLE kumar.headers;; try to repair it
; REPAIR TABLE raju.headers;; try to repair it

后文;mysql执行时将抛出一个错误,但我可以忽略它。

/usr/local/mysql/bin/mysqld:Table.“/beta/search\u data”被标记为崩溃,应该修复。类似这样的错误不会生成所需的语句。我需要做的是用替换最后一个';然后删除所有内容。]读取表“/kumar/headers”时出现错误126#另一个需要处理的错误。@shantanuo,您需要完全指定要查找的行。您的原始规范只是包含表的不正确密钥文件的表单。在这之前,没有任何解决方案可以在没有误报机会的情况下为您提供所需的解决方案。
sed
可以执行
grep的
工作:
sed-e'/针对/{s/'-e'-e'-e'}'的密钥文件不正确。
修复表语句应以结束;该脚本不处理上述其他类型的错误。
; REPAIR TABLE kumar.headers;; try to repair it
; REPAIR TABLE raju.headers;; try to repair it