Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用Perl将带有--to#的SQL注释转换为#?_Sql_Regex_Perl - Fatal编程技术网

如何使用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
和inplace
sed

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