Mysql 使用Grep在每行循环中创建多个变量-BASH
我试图以上述格式获取一个多行文件,并从中生成MySQL insert语句。最终结果目标类似于输出:-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
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
注意,MySqlVALUES
语法要求用引号括起复杂的字符串参数。
要获得有效的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");