【问题标题】:Remove the first comment from a collection of Java source files using Perl使用 Perl 从 Java 源文件集合中删除第一条注释
【发布时间】:2011-11-05 21:46:24
【问题描述】:

我正在尝试从 Java 源文件集合中删除第一个 C 样式注释(仅是第一个)。起初我尝试了一个多行 sed,但它不能正常工作,所以在谷歌搜索之后,似乎 Perl 是要走的路。我曾经喜欢 Perl,它是我用来制作 Web 程序的第一种语言,但我在试图让这个脚本工作时遇到了困难:

#!/usr/bin/perl -i.bak

$s=join("",<>);
$s=~ s/("(\\\\|\\"|[^"])*")|(\/\*([^*]|\*(?=[^\/]))*\*\/)|(\/\/.*)/$1 /;
print $s;

我用要处理的文件的文件名来调用它,例如./com.pl test.java。根据互联网上的所有内容,-i(就地编辑)应该将输出从打印语句重定向到文件,而不是打印到标准输出。现在事情是这样的:它没有。无论我尝试什么,我似乎都无法用打印输出替换文件。我也试过 $^I ,但也没有用。

我不知道这是否相关,但我使用的是 Ubuntu 11.04。

附:我知道正则表达式源代码的陷阱:)

【问题讨论】:

标签: regex perl scripting


【解决方案1】:

以下命令不能从命令行运行吗?

$ perl -pi.bak 's|your_regex|here|' *.java

在脚本中

上面的等效脚本是:

#!/usr/bin/perl -pi.bak
s|your_regex|here|;

triplee 在他的评论中指出,原始帖子缺少 p 标志。

请参阅perldoc perlrun 了解更多信息。

【讨论】:

  • 这行得通——当我尝试在 Perl 脚本中就地执行时,它会停止工作。 :(
  • 没错,您需要拥有-n 或-p 才能让-i 知道该做什么。您可能需要添加 -0777 以使其对整个文件进行扫描。
  • 谢谢!上面的解决方案有效(我也添加了 -0777)。我非常尊重那些完全了解 Perl 脚本的人。 :)
  • @Dave :我不太确定“完全”...我们每天都在学习新东西 ;)
猜你喜欢
  • 2020-08-01
  • 1970-01-01
  • 1970-01-01
  • 2015-01-09
  • 1970-01-01
  • 2010-10-27
  • 2011-01-20
  • 2011-12-10
  • 2011-12-25
相关资源
最近更新 更多