如何使用Perl将带有--to#的SQL注释转换为#?
更新: 这才是有效的如何使用Perl将带有--to#的SQL注释转换为#?,sql,regex,perl,Sql,Regex,Perl,更新: 这才是有效的 fgrep -ircl --include=*.sql -- -- * 我有各种带有'--'注释的SQL文件,我们迁移到了MySQL的最新版本,它讨厌这些注释。我想用#来代替 我正在寻找一个递归的,就地替换一个线性 这就是我所拥有的: perl -p -i -e 's/--/# /g'` ``fgrep -- -- * 示例.sql文件: use myDB; --did you get an error 我得到以下错误: 无法识别的开关:--did(-h将显示有
fgrep -ircl --include=*.sql -- -- *
我有各种带有'--'注释的SQL文件,我们迁移到了MySQL的最新版本,它讨厌这些注释。我想用#来代替
我正在寻找一个递归的,就地替换一个线性
这就是我所拥有的:
perl -p -i -e 's/--/# /g'` ``fgrep -- -- *
示例.sql文件:
use myDB;
--did you get an error
我得到以下错误:
无法识别的开关:--did(-h将显示有效选项)
p、 s:fgrep跳过2个破折号只是如果你感兴趣的话
非常感谢您的帮助。参数
-e的/../…/”
后面的命令行参数应该是文件名。使用fgrep-l
返回包含模式的文件名:
perl -p -i -e 's/--/# /g' `fgrep -l -- -- * `
脚本形式的等价物是:
#!/usr/bin/perl -i
use warnings;
use strict;
while(<>) {
s/--/# /g;
print;
}
#/usr/bin/perl-i
使用警告;
严格使用;
while(){
s/-/#/g;
印刷品;
}
如果我有多个文件带有--comment
形式的注释,并向该脚本提供任意数量的名称,则它们会被更改为#comment
,您可以使用find、ls、grep等来查找这些文件
使用1号班轮本身没有错
这就是你要找的吗?我会结合使用
find
和inplacesed
find . -name '*.sql' -exec sed -i -e "s/^--/#/" '{}' \;
请注意,它将仅用
--
如果您不想替换它,正则表达式将变得更加复杂,例如:
INSERT INTO stuff VALUES (...) -- values used for xyz
因为--
也可能在您的数据中(我想您不想替换这些)
INSERT-INTO-stuff-VALUES(42,“”)——用于xyz的值
这非常有效,但我看到的唯一问题是,如果文件夹有空间(例如SQL脚本),那么它就会失败。不确定如何处理这个问题,还有一个问题(不太关键)是它正在深入tar文件并试图替换,但也失败了。思想?谢谢..也许是xargs
解决方案?我不熟悉这个工具,但是类似于fgrep-l--*|xargs perl-p-I-e'.''.
的东西可能会奏效。这是正确的答案。如果有优秀的命令行实用程序可以用较少的麻烦为您做同样的事情,那么使用Perl解决这个问题就太过分了。谢谢。我更喜欢这个答案,因为它通过使用find的--exec绕过了文件名中的空格问题。此外,行开头的“--”是一个重要的点。
INSERT INTO stuff VALUES (42, "<!-- sboing -->") -- values used for xyz