我有一个MySQL查询,我需要在bash脚本中多次运行 它有很长的正则表达式列表 我想避免在脚本中多次重复长列表 代码:
select * from tableName where fieldName regexp concat(
... big long list of regular expressions ...
);
下一个MySQL命令将有不同的选择标准 而其他MySQL命令将删除而不是选择 但正则表达式列表保持不变 我尝试使用bash source命令,但MySQL解释了这一点,所以我认为这必须是一个MySQL命令 那么......我怎么能这样做......
select * from tableName where fieldName regexp concat(
[import regular expression list from file]
);
提前致谢。
更新 - bash尝试:
SCRIPT1:
#!/bin/bash
mysql -uusername -ppassword -D dbname -e "select * from tablename where fieldname regexp concat(
source /scripts/script2
);"
SCRIPT2:
'cat|',
'dog|',
'fish'
错误:
ERROR 1054 (42S22) at line 1: Unknown column 'source' in 'where clause'
答案 0 :(得分:0)
连接所需的片段,然后将该批次传递给SQL。
#!/bin/bash
sed '1s/^/select * from tablename where fieldname regexp concat(/
$s/$/);/' /scripts/script2 |
mysql -uusername -ppassword -D dbname
(要查看sed
脚本的作用,请将管道注释到MySQL。)
......或者有点等同
#!/bin/bash
mysql -uusername -ppassword -D dbname <<____HERE
select * from tablename where fieldname regexp concat($(cat /scripts/script2));
____HERE
但如果here document包含任何shell元字符(如此处的星号),则会冒着奇怪副作用的风险。在最坏的情况下,可能会将其分为引用部分和未引用部分。
...或者,用一个稍微愚蠢的解决方法解除它:
#!/bin/bash
splat='*'
mysql -uusername -ppassword -D dbname <<____HERE
select $splat from tablename where fieldname regexp concat($(cat /scripts/script2));
____HERE