shell 导入SQL转储

sqyvllje  于 2023-02-05  发布在  Shell
关注(0)|答案(1)|浏览(96)

从下面的数据摘录中,我试图只查看粗体的项目,有办法做到这一点吗?文件的特定部分很重要,这就是为什么“into. db. values”很重要-还假设我不知道这些项目的实际值

grep "INTO .db. VALUES" ./anikokiss_mysql4.sql

插入db值(“本地主机”、“博客”、“yscr_bbYcqN”、"Y"、“Y”、"Y“、" Y”、"N"、"N"、"N“、" N”),(“本地主机”、“博客1”、“yscr_bbS4kf”、“是”、“是”、“是”、“是”、"否"、"否“、"否”、"否“),(“本地主机”、“博客”、“yscr_bbhrSZ”、"Y"、"Y“、" Y”、"Y“、" N "、" N "、" N”、"N“),(“本地主机”、“博客”、“yscr_bbBl 0 C”、“Y "、" Y”、"Y“、" Y”、"N"、"N"、"N“)、(”本地主机“、”博客“、”yscr_bbrsKX“、”Y"、"Y“、" Y”、"Y“、”N“、" N "、" N”、"N“);
结果

cut -d',' -f2 <(awk '/.*INTO .?db.? VALUES.*/,/.*;/{if (NR > 2) nr[NR]}; NR in nr' ./anikokiss_mysql4.sql)

'blog'

因此,它似乎只选取第一批命令分隔值,而忽略后面的值
与grep命令类似

grep "INTO .db. VALUES" ./anikokiss_mysql4.sql | cut -d "'" -f4

我们得到了结果

blog

当我更新数据库名称时

find . -name '*.sql' -exec sed -i "s/\\(CREATE DATABASE [^\`]*\`\\)/\\1${cpuser}_/" {} +

电流输出

[root@uk01 public_html]# grep -Pzo '(?s)INTO .?db.? VALUES[^(]\K[^;]*' aniko.sql | grep -Pao '\(([^,]*,){2}\K[^,]*' | sed -e 's/^/test_/'
test_'yscr_bbYcqN'
test_'yscr_bbS4kf'
test_'yscr_bbhrSZ'
test_'yscr_bbBl0C'
test_'yscr_bbrsKX'
sauutmhj

sauutmhj1#

这里使用grep来实现您想要的:

grep -Pzo '(?s)INTO .?db.? VALUES[^(]\K[^;]*' ./anikokiss_mysql4.sql | grep -Pao '\([^,]*,\K[^,]*'

首先,我使用grep获取INTO db VALUES之后的所有内容,然后将其输出传递给grep的另一个示例,该示例在第一个,之后将其截断。
要更改要获取的列,只需重复上一个grep {N}中的look behind:

# This gets first column
grep -Pzo '(?s)INTO .?db.? VALUES[^(]\K[^;]*' file | grep -Pao '\(([^,]*,){0}\K[^,]*'
# This gets fourth column
grep -Pzo '(?s)INTO .?db.? VALUES[^(]\K[^;]*' file | grep -Pao '\(([^,]*,){3}\K[^,]*'

会得到第四列,

相关问题