首先,对我的英语感到抱歉,因为我不知道“ ` ”的正确名称(反引号)
在SQL转储文件上,我需要在数据库转储中提取块,所有数据库均以下面的代码开头,而他的sql转储以其他数据库的下一个块结尾,
--
-- Current Database: `current_database`
--
// some sql code
--
-- Current Database: `next_database`
--
for d in $(cat file_with_databasesnames.txt);do echo $d;LC_ALL=C sed -n '/^-- Current Database: `database_name`/,/^-- Current Database: `/p' mysqldump.sql > $d.sql
在代码上,我需要传递值$ d而不是database_name
我尝试了几种方法,但都失败了。
`${d}`
`$d`
\`$d\`
我用
bash --version
GNU bash, version 3.2.57(1)-release (x86_64-apple-darwin17)
Copyright (C) 2007 Free Software Foundation, Inc.
关闭后进行编辑以重复。
是反引号同样是单引号?我觉得不行。
这与您的反引号无关,完全是由于单引号引起的。有关如何在单引号字符串中使用变量的信息,请参见此问题。这是根据该问题修正的示例:
for d in $(cat file_with_databasesnames.txt)
do
echo $d;
LC_ALL=C sed -n '/^-- Current Database: `'"$d"'`/,/^-- Current Database: `/p' mysqldump.sql > $d.sql
done
这是显示其工作方式的示例:
$ cat file_with_databasesnames.txt
mytarget
$ cat mysqldump.sql
-- Current Database: `users`
Some dump here
-- Current Database: `mytarget`
This is what you want
-- Current Database: `etc`
And so on
$ for d in $(cat file_with_databasesnames.txt)
do
echo $d;
LC_ALL=C sed -n '/^-- Current Database: `'"$d"'`/,/^-- Current Database: `/p' mysqldump.sql > $d.sql
done
mytarget
$ cat mytarget.sql
-- Current Database: `mytarget`
This is what you want
-- Current Database: `etc`
这是一个版本,对带有while read
循环的行进行读取并以明确的形式显示db名称进行了总体改进:
while IFS= read -r db
do
printf 'Processing: %q\n' "$db"
LC_ALL=C sed -n '/^-- Current Database: `'"$db"'`/,/^-- Current Database: `/p' mysqldump.sql > "$db.sql"
done < file_with_databasesnames.txt
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句