【发布时间】:2015-08-25 19:07:49
【问题描述】:
我使用的是 Mac 10.9.5、bash shell 和 perl 5、版本 16、subversion 3 (v5.16.3)。我有以下脚本...
#!/bin/bash
perl -pi -e "s/([^,]+?),([^,]+?),([^,]+?),([^,]+?),([^,]+?),([^,]+?),([^,]+?),([^,]+?),([^,]+?),([^,]+?),([^,]+?),([^,]+?),([^,]+?),([^,]+?),([^,]+?),([^,]+?),([^,]+?),([^,]+?),([^,]+?),([^,]+?),([^,]+?),([^,]+?),([^,]+?),([^,]+?),([^,]+?),([^,]+?),([^,]+?),([^,]+?)/REPLACE INTO student (ID, SIS_ID, STUDENT_NUM, USER_ID, OTHER_USER_ID) VALUES (REPLACE(uuid(), '-', ''), '\$24', '\$26', '\$2', '\$27');/g" $1
但是,当我对文件运行脚本时...
sh myscript.sh ~/Downloads/myfile.csv
上面的内容只针对文件的第一行而不是针对文件中的每一行,尽管文件有数千行...
davea$ wc -l ~/Downloads/myfile.csv
91552 /Users/davea/Downloads/myfile.csv
如何调整上述内容,以便将搜索和替换应用到文件的每一行?
编辑:这是我作为输入传入的文件示例
app.app.first_name,app.app.id,app.app.last_name,app.app.max_time,app.app.url,app.app.user_name,thirdparty.created,thirdparty.district,thirdparty.dob,thirdparty.ell_status,thirdparty.email,thirdparty.frl_status,thirdparty.gender,thirdparty.grade,thirdparty.hispanic_ethnicity,thirdparty.iep_status,thirdparty.last_modified,thirdparty.location.zip,thirdparty.name.first,thirdparty.name.last,thirdparty.name.middle,thirdparty.race,thirdparty.school,thirdparty.sis_id,thirdparty.state_id,thirdparty.student_number,thirdparty.id,matchmaker_result
FirstName,0040FBA053464647BD51141EECF4437F,LastName,2014-09-15 20:46:11,cityunifiedca.springboardonline.org,mlastname,2014-04-04T23:03:29.916Z,51e76ab1d93412f47b000c32,6/12/2000,,,Paid,F,10,Y,Y,2015-08-19T21:33:13.989Z,90033-1803,FIRSTNAME,LASTNAME,A,Caucasian,51f811478a86244d2900033f,061200F010,6124939964,061200F010,533f3a412a1f1fea24c8e164,match
这是上面运行的输出
REPLACE INTO student (ID, SIS_ID, STUDENT_NUM, USER_ID, OTHER_USER_ID) VALUES (REPLACE(uuid(), '-', ''), 'thirdparty.sis_id', 'thirdparty.student_number', 'app.app.id', 'thirdparty.id');atchmaker_result
FirstName,0040FBA053464647BD51141EECF4437F,LastName,2014-09-15 20:46:11,cityunifiedca.springboardonline.org,mlastname,2014-04-04T23:03:29.916Z,51e76ab1d93412f47b000c32,6/12/2000,,,Paid,F,10,Y,Y,2015-08-19T21:33:13.989Z,90033-1803,FIRSTNAME,LASTNAME,A,Caucasian,51f811478a86244d2900033f,061200F010,6124939964,061200F010,533f3a412a1f1fea24c8e164,match
【问题讨论】:
-
该命令已经在每一行上运行。您的输入内容的示例也会很有用
-
嗨,它不是在每一行都运行它。我包含了一个示例文件和针对该文件运行脚本的输出。这不是引用问题的重复,因为上面处理了为什么脚本不是在每一行上运行,而另一个问题询问了编写搜索和替换语句的更好方法。
-
它在每一行上运行,但正则表达式不匹配,因为您在第二行中有一些空字段。你应该使用
split或 Text::CSV 而不是那个可怕的正则表达式。 -
@DaveA 我将参考我在您的另一篇文章中所说的内容(是重复的,因为您仍在尝试做完全相同的事情),也就是说:正则表达式不是这项工作的正确工具。