在Mac OSX(iTerm2)上使用没有外部应用程序的终端,除了postgres之外,我想在一个相当大的(52 MB)pg_dump数据文件上运行一些正则表达式查找/替换,因为它被导入到PostgreSQL数据库中。我需要在转储文件命中PostgreSQL之前执行此操作,因为我必须转换创建和修改表的传入SQL查询。
我用来导入数据的shell命令是:
psql MyDatabase < mydata.sql
有没有办法通过正则表达式查找/替换过滤器管道数据?我可以使用本机Linux命令行实用程序(如grep?
)执行某些操作或者,我如何批处理我的正则表达式并将它们应用到我的转储文件中,然后将更改保存到新文件中?
答案 0 :(得分:2)
您可以使用了解正则表达式的sed
。
例如,要使用“anotherschema”替换所有出现的“myschema”字围边界,您可以使用:
sed -e 's/\bmy\(schema\)\b/another\1/g' mydata.sql | psql MyDatabase
答案 1 :(得分:1)
或者,我如何批处理我的正则表达式并将它们应用到我的转储中 文件,然后将更改保存到新文件?
sed -e 's/\bmy\(schema\)\b/another\1/g' mydata.sql >mysqlnew.sql
这会将输出重定向到名为mysqlnew.sql
的新文件。
请注意,sed
支持就地编辑选项。使用inplace edit -i
选项,上面的命令可以替换为
sed i.bak -e 's/\bmy\(schema\)\b/another\1/g' mydata.sql
此命令会将原始mydata.sql
的副本复制到mydata.sql.bak
和
将更改永久写入mydata.sql
。