GREP-查找字符串的所有匹配项

GREP-查找字符串的所有匹配项,grep,pattern-matching,white-labelling,Grep,Pattern Matching,White Labelling,我的任务是为应用程序添加白色标签,使其不包含对我们公司、网站等的引用。我遇到的问题是,我有许多不同的模式要寻找,并希望保证所有模式都已删除。由于应用程序不是在内部(完全)开发的,因此我们不能简单地在messages.properties中查找出现的情况,也无法完成。我们必须浏览JSP、Java代码和xml 我正在使用grep筛选结果,如下所示: grep SOME_PATTERN . -ir | grep -v import | grep -v // | grep -v /* ... 当我在命

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

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

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


不过,最好的解决方案是使用PerlPython的简单脚本,我将使用sed,而不是grep! Sed用于对输入流执行基本的文本转换。 使用sed命令尝试
s/regexp/replacement/
选项

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


不过,最好的解决方案是使用PerlPython编写一个简单的脚本,以解决您对遗漏某些事件的担忧,为什么不逐步过滤:

  • 创建一个包含所有可能内容的文本文件 匹配作为起点
  • 使用过滤器X(grep表示“^import”, 例如)转储可能的错误 将正片导入tmp文件
  • 再次使用“过滤器X”删除这些过滤器 工作文件中的匹配项(a) [1]的副本
  • 快速目视检查tmp 文件,并添加任何真正的匹配回来 在
  • 对其他过滤器重复[2]-[4]

  • 当然,这可能需要一些时间,但听起来这并不是你想弄错的…

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

  • 创建一个包含所有可能内容的文本文件 匹配作为起点
  • 使用过滤器X(grep表示“^import”, 例如)转储可能的错误 将正片导入tmp文件
  • 再次使用“过滤器X”删除这些过滤器 工作文件中的匹配项(a) [1]的副本
  • 快速目视检查tmp 文件,并添加任何真正的匹配回来 在
  • 对其他过滤器重复[2]-[4]

  • 当然,这可能需要一些时间,但听起来这并不是你想搞错的事情。

    听起来可能是个赢家。我希望找到一个正则表达式,它是一个神奇的/简单的按钮。我想问题是什么对你更有价值:浪费一个小时手动寻找可能的误报,或者浪费一个小时被你的老板撕开一个新的,因为你的über聪明的regexp错过了Java语言规范中一些疯狂的复杂案例。我来自机械工程背景,所以我知道错误会发生。。。我正在努力选择一条道路,这条道路将产生更少的错误和更好的结果,并且是可重复的。一台计算机可以毫无问题地完成重复性任务,而另一方面,人类。。。这就是计算机存在的原因。我总是可以调整我的正则表达式,它只需要一分钟就可以运行;然而,手动评估这可能需要几天或几周的时间才能完成我必须完成的内容量,在一天或几小时后,我肯定我可能会跳过一两次,这听起来像是一个可能的赢家。我希望找到一个正则表达式,它是一个神奇的/简单的按钮。我想问题是什么对你更有价值:浪费一个小时手动寻找可能的误报,或者浪费一个小时被你的老板撕开一个新的,因为你的über聪明的regexp错过了Java语言规范中一些疯狂的复杂案例。我来自机械工程背景,所以我知道错误会发生。。。我正在努力选择一条道路,这条道路将产生更少的错误和更好的结果,并且是可重复的。一台计算机可以毫无问题地完成重复性任务,而另一方面,人类。。。这就是计算机存在的原因。我总是可以调整我的正则表达式,它只需要一分钟就可以运行;然而,手动评估这可能需要几天或几周的时间才能完成我必须完成的内容量,在一天或几小时后,我肯定我可能会跳过一两次。当你谈论这些模式时,你所说的“删除”具体指的是什么?如果结果文件语法不正确,或者无法正常运行,该怎么办?您能确信简单地删除整个字符序列不会破坏程序的功能吗?(既然你提到了模式中/*的可能性,我想情况并非如此。如果是,这很简单。如果不是,我认为你实际上是在要求一个理解源代码的程序……有效的AI!)当你谈论这些模式时,“删除”具体是什么意思?如果