【发布时间】:2015-05-09 21:09:51
【问题描述】:
更新问题:http://pastebin.com/SrVC8PvW:
Sed 文件 — csv2sql.sed:
s|\([A-Z]*\),\([A-Z]*\),\([A-Za-z0-9’ ()\.\!-]*\),\([A-Za-z0-9’ ()\.\!-]*\),\([0-9]*\)|INSERT INTO `Schedule` (`ID`,`YEAR`,`NUMBER`,`TeamR1`,`TeamR2`, `TeamR3`, `TeamB1`, `TeamB2`, `TeamB3`) VALUES ('\1', '\2', '\3', '\4', '\5', '\6', '\7', '\8', '\9');|g
CSV 文件(部分):
1,2015,0,57,3310,3676,624,3802,3481
控制台错误:
sed: file csv2sql.sed line 1: invalid reference \9 on `s` command's RHS
我有一个名为 csv2sql.sed 的 SED 文件,它将接收一个 CSV 文件并将其输出为 SQL 语法。我想运行脚本,并在同一文件夹中有一个名为 schedules.sql 的 new sql 文件。
如何解决我遇到的错误?
【问题讨论】:
-
man sed。你会比你输入这个问题更快地得到答案。 -
或至少使用小样本输入、预期输出和当前输出(包括任何错误消息(精确文本))来编辑您的问题。祝你好运。
-
sed文件将\1捕获到\5,因此对\6、\7、\8和\9的引用是错误的。这就是错误消息所说的,真的。 -
@JonathanLeffler 你对 6-9 做什么?
-
要么在
s///正则表达式的左侧添加更多捕获,要么不在其右侧引用它们(即使它是s|||命令)。如果你必须用sed来做,你必须把这些东西写出来。使用awk可能会做得更好,它可以合理可靠地以逗号分隔(除非任何字段中都嵌入了逗号——这也让sed令人头疼),或者使用具有“适当”支持的语言对于 CSV 格式数据:Perl 有一个可以安装的 Text::CSV 模块,Python 有一个可以使用的 CSV 模块。