Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
String 如何在查询中填充SQL_String_Bash - Fatal编程技术网

String 如何在查询中填充SQL

String 如何在查询中填充SQL,string,bash,String,Bash,我有一个通用的SQL查询,我想使用bash从我获取字符串的grep命令填充所有行。我从提取字符串的文件中获得的字符串数量也各不相同 查询示例: select * from table_name where column_name in ('string', 'string', 'string', 'string', 'string', 'string', 'string',) 基本上,我是在查看电子邮件ID,然后得到一个消息ID的

我有一个通用的SQL查询,我想使用bash从我获取字符串的grep命令填充所有行。我从提取字符串的文件中获得的字符串数量也各不相同

查询示例:

    select * from table_name
    where column_name in ('string',
    'string',
    'string',
    'string',
    'string',
    'string',
    'string',)
基本上,我是在查看电子邮件ID,然后得到一个消息ID的输出。每行一个字符串

grep -Eoh "[a-z0-9]{0,9}\.0\.[0-9]{0,9}\.00\-[0-9]{0,9}\.[0-9]{0,9}\.[a-z0-9{0,10}\.hostname.com" *filename.txt 

62e60645.0.2279968.00-2316.3908868.d02c12m066.hostname.com
3ebe0645.0.522591.00-2200.908364.a02c11m025.hostname.com
356f0645.0.1401456.00-2085.2306795.g02c12m014.hostname.com
9a001645.0.1594149.00-1533.2646910.y01c12m093.hostname.com
等等

我想做的是将grep命令中的所有字符串自动插入到查询中,这样我就可以简单地将字符串粘贴并运行

$ echo 'select * from table_name where column_name in ('"$(grep -Eoh '[a-z0-9]{0,9}\.0\.[0-9]{0,9}\.00\-[0-9]{0,9}\.[0-9]{0,9}\.[a-z0-9]{0,10}\.hostname.com' *filename.txt | awk -v ORS=', ' '{print "\047"$0"\047"}')"')'
select * from table_name where column_name in ('62e60645.0.2279968.00-2316.3908868.d02c12m066.hostname.com', '3ebe0645.0.522591.00-2200.908364.a02c11m025.hostname.com', '356f0645.0.1401456.00-2085.2306795.g02c12m014.hostname.com', '9a001645.0.1594149.00-1533.2646910.y01c12m093.hostname.com', )
修正了grep正则表达式中的一个输入错误。你错过了最后一场比赛的最后一场比赛

内部awk命令执行行到列表格式

awk -v ORS=', ' '{print "\047"$0"\047"}')"'
-v ORS=',将输出记录分隔符设置为


{print\047$0\047}在每一行的前后加上“OR”,并在末尾加上值。

您也可以通过逐行迭代和回显来完成:

#!/bin/bash
echo 'select * from table_name where column_name in ('
{
    read
    echo -n "'$REPLY'"
    while read; do
        echo -ne ",\n'$REPLY'"
    done
} < <(grep -Eoh '[a-z0-9]{0,9}\.0\.[0-9]{0,9}\.00\-[0-9]{0,9}\.[0-9]{0,9}\.[a-z0-9]{0,10}\.hostname.com' *filename.txt)
echo ')'

这里$REPLY包含从grep命令提供的输入中逐个读取的行,grep命令的输出包含需要在该sql查询中的字符串?