Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ssh/2.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
Mysql 使用Grep在每行循环中创建多个变量-BASH_Mysql_Bash_Loops_While Loop_Grep - Fatal编程技术网

Mysql 使用Grep在每行循环中创建多个变量-BASH

Mysql 使用Grep在每行循环中创建多个变量-BASH,mysql,bash,loops,while-loop,grep,Mysql,Bash,Loops,While Loop,Grep,我试图以上述格式获取一个多行文件,并从中生成MySQL insert语句。最终结果目标类似于输出:- insert into ansible_db (ip, version) values ("$ip", "$version") 以下每个数据示例的每行(这是输入文件,我想要IP地址和msg段的结果-ie 4.0.3):- 以下GREP可适当地获取IP和消息:- $ip=grep -oE '[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}' $ve

我试图以上述格式获取一个多行文件,并从中生成MySQL insert语句。最终结果目标类似于输出:-

insert into ansible_db (ip, version) values ("$ip", "$version") 
以下每个数据示例的每行(这是输入文件,我想要IP地址和msg段的结果-ie 4.0.3):-

以下GREP可适当地获取IP和消息:-

$ip=grep -oE '[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}' 
$version= grep -oP '(?<=\"\: \").*(?=\"s})' #format of the message will vary going forward. 
$ip=grep-oE'[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}'

$version=grep-oP'(?在本例中,while循环不是必需的。如果您的文件具有问题中提供的一致结构,则以下命令应打印所需的行

awk -v FS='[][]|"' '{print "insert into ansible_db (ip, version) values ( \""$2 "\" , \""$6"\" )" }' yourInputFile
请注意,上述命令将在std out中显示结果,如果要执行,则可以在命令末尾使用
|bash
,如:

awk -v FS='[][]|"' '{print "insert into ansible_db (ip, version) values ( "$2 " , "$6" )" }' yourInputFile |bash
注意,MySql
VALUES
语法要求用引号括起复杂的字符串参数。
要获得有效的MySql insert语句,请使用以下方法:

awk '{ gsub(/[\[\]]/,"",$2); sub("\"+s}","\"",$6); 
       print "insert into ansible_db (ip, version) values (\""$2"\", "$6");" }' file
输出:

insert into ansible_db (ip, version) values ("192.168.0.214", "4.0.3");
insert into ansible_db (ip, version) values ("192.168.0.210", "4.0.8");
insert into ansible_db (ip, version) values ("192.168.0.208", "fdsajkghjfdka");
insert into ansible_db (ip, version) values ("192.168.0.216", "Potatoes");

至少对我来说,这其中的哪一部分是输入格式,哪一部分是输出格式还不清楚。我认为可以通过一些编辑来澄清每一部分的外观/需要。不需要bash循环,请尝试
awk-vfs='[][]|“'{print”插入ansible_db(ip,version)值(“$2”,“$6”)}“yourInputFile
PS就是这样做的,非常感谢。最终结果将是代码容易受到SQL注入攻击。不要这样做。@Letscriptt感谢您的编辑……谢谢您,我已经按照您的示例注释并转义了引号。不过,我会要求PS更新其答案,以包括这一点。
insert into ansible_db (ip, version) values ("192.168.0.214", "4.0.3");
insert into ansible_db (ip, version) values ("192.168.0.210", "4.0.8");
insert into ansible_db (ip, version) values ("192.168.0.208", "fdsajkghjfdka");
insert into ansible_db (ip, version) values ("192.168.0.216", "Potatoes");