GREP - 查找所有出现的字符串

时间:2009-11-23 20:37:09

标签: grep pattern-matching white-labelling

我的任务是对应用程序进行白色标记,使其不包含对我们公司,网站等的引用。我遇到的问题是我有许多不同的模式需要查找并且希望保证所有模式都是除去。由于应用程序不是内部(完全)开发的,因此我们不能简单地在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并检查源以确保它是干净的。

有什么想法吗?

沃尔特

2 个答案:

答案 0 :(得分:1)

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

  1. 尽可能创建一个文本文件 匹配作为起点。
  2. 使用过滤器X(grep用于'^ import', 例如)转储可能的错误 积极进入tmp文件。
  3. 再次使用过滤器X删除它们 来自您的工作文件的匹配(a [1]的副本。
  4. 快速视觉传递tmp 文件并添加任何真正的匹配 英寸
  5. 与其他过滤器一起重复[2] - [4]。
  6. 当然,这可能需要一些时间,但听起来这不是你想要出错的事情......

答案 1 :(得分:0)

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

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

然而,最好的解决方案是 Perl Python 中的简单脚本。