我尝试了类似的东西
awk -F " " '{if($1=="INSERT"){print $5}}' input.sql | \
sed -e "s/^(//g" -e "s/),(/\n/g" -e "s/['\"]//g" \
-e "s/);$//g" -e "s/,/;/g" > output.txt
但我发现它很慢且没有优化
MySQL转储文件如下所示
CREATE TABLE MyTable{
data_1,
data_2
};
INSERT INTO MyTAble VALUES ('data_1','data_2'),...,('data_1','data_2');
INSERT INTO MyTAble VALUES ('data_1','data_2'),...,('data_1','data_2');
...
INSERT INTO MyTAble VALUES ('data_1','data_2'),...,('data_1','data_2');
我的目标是获取一个包含以下结果的文件(并且没有'或'来包含字段):
data_1,data_2
data_1,data_2
...
data_1,data_2
提前致谢!
答案 0 :(得分:1)
您可以尝试:
gawk '/^INSERT/ {
match ($0,/[^(]*\(([^)]*)\)/,a)
print a[1]
}' input.sql
*更新*
再次阅读问题之后,也许这就是你想要的更多:
/^INSERT/ {
line=$0
while (match (line,/[^(]*\(([^)]*)\)/,a)) {
cur=a[1]
sub(/^['"]/,"",cur)
sub(/['"]$/,"",cur)
print cur
line=substr(line,RSTART+RLENGTH)
}
}
*更新2 *
根据问题的上次更新,这是一个新版本:
/^INSERT/ {
line=$0
while (match (line,/[^(]*\(([^)]*)\)/,a)) {
line=substr(line,RSTART+RLENGTH)
match(a[1],/'([^']*)','([^']*)'/,b)
print b[1]
print b[2]
}
}
答案 1 :(得分:1)
sed -n "/.*INSERT INTO MyTAble VALUES (\([^)]*\)).*/ {
s/.*INSERT INTO MyTAble VALUES \(.*\);/\1/
s/(\([^)]*\)),*/\\1\\
/g
s/'//g
s/\\n$//
p
}" input.sql > output.sql
基于您的(新)样本