1

我的任务是给应用程序贴上白标签,使其不包含对我们公司、网站等的引用。我遇到的问题是我有许多不同的模式要寻找,并希望保证所有模式都被删除。由于该应用程序不是内部(完全)开发的,我们不能简单地在 messages.properties 中查找事件并完成。我们必须通过 JSP、Java 代码和 xml。

我正在使用 grep 来过滤这样的结果:

grep SOME_PATTERN . -ir | grep -v import | grep -v // | grep -v /* ...

当我在命令行上使用它们时,这些模式被转义了;但是,我不觉得这种模式匹配非常健壮。可能会出现导入(不太可能)甚至 /*(javadoc 注释的开头)的事件。

所有输出到屏幕的文本必须来自某处的字符串声明或常量文件。所以,我可以假设我会找到类似的东西:

public static final String SOME_CONSTANT = "SOME_PATTERN is currently unavailable";

我想找到这种情况以及:

public static final String SOME_CONSTANT = "
SOME_PATTERN blah blah blah";

或者,如果我们有一个内部爬虫/自动化测试,我可以简单地从每个页面拉回 xhtml 并检查源代码以确保它是干净的。

4

2 回答 2

1

为了解决您对遗漏某些事件的担忧,为什么不逐步过滤:

  1. 创建一个包含所有可能匹配项的文本文件作为起点。
  2. 使用过滤器 X(例如 grep 表示“^import”)将可能的误报转储到 tmp 文件中。
  3. 再次使用过滤器 X 从您的工作文件([1] 的副本)中删除这些匹配项。
  4. 快速查看 tmp 文件并添加任何真实匹配项。
  5. 对其他过滤器重复 [2]-[4]。

当然,这可能需要一些时间,但听起来这不是你想要弄错的东西......

于 2009-11-23T21:07:01.237 回答
0

我会使用sed,而不是grep!Sed 用于对输入流执行基本的文本转换。使用 sed 命令尝试s/regexp/replacement/选项。

你也可以试试awk命令。它有一个选项-F用于字段分隔,您可以将其与; ;分隔文件的行 .

然而,最好的解决方案是使用PerlPython编写一个简单的脚本。

于 2009-11-23T20:48:43.800 回答