我正在尝试从Java源文件集合中删除第一个C风格的注释(仅第一个)。起初我尝试了一个多线sed,但是没有正常工作所以在一些谷歌搜索后似乎Perl是要走的路。我曾经喜欢Perl,它是我用来制作网络程序的第一种语言,但我遇到了试图使这个脚本工作的问题:
#!/usr/bin/perl -i.bak
$s=join("",<>);
$s=~ s/("(\\\\|\\"|[^"])*")|(\/\*([^*]|\*(?=[^\/]))*\*\/)|(\/\/.*)/$1 /;
print $s;
我用要处理的文件的文件名来调用它,例如./com.pl test.java。根据Internet上的所有内容,-i(就地编辑)应该将输出从print语句重定向到文件,而不是打印到stdout。现在这就是事情:事实并非如此。无论我尝试什么,我似乎无法用打印输出替换文件。我也尝试过$ ^但是这也不起作用。
我不知道它是否相关,但我在Ubuntu 11.04上。
P.S。我知道regexing源代码的缺陷:)
答案 0 :(得分:1)
以下命令行无效吗?
$ perl -pi.bak 's|your_regex|here|' *.java
与上述相同的脚本是:
#!/usr/bin/perl -pi.bak
s|your_regex|here|;
正如triplee在评论中指出的那样,原始帖子错过了p
标记。
有关详情,请参阅perldoc perlrun
。