Grep 查找源代码中未引用的存储过程

Grep 查找源代码中未引用的存储过程,grep,Grep,我试图通过删除应用程序未使用的所有过程来清理遗留数据库。使用grep,我已经能够确定源代码中没有出现单个过程。有没有办法一次完成所有程序 更新:当使用-E“proc1 | proc2”生成所有文件中与任一模式匹配的所有行的输出时,这不是很有用。遗留数据库有2000多个过程 我尝试使用-o选项,认为我可以使用它的输出作为对原始模式进行反向搜索的模式。但是,我发现当您对多个模式使用-o选项时,没有输出 还有其他想法吗 更新:经过进一步的实验,我发现是-I和-o选项的组合阻止了输出。不幸的是,在此上下

我试图通过删除应用程序未使用的所有过程来清理遗留数据库。使用grep,我已经能够确定源代码中没有出现单个过程。有没有办法一次完成所有程序

更新:当使用-E“proc1 | proc2”生成所有文件中与任一模式匹配的所有行的输出时,这不是很有用。遗留数据库有2000多个过程

我尝试使用-o选项,认为我可以使用它的输出作为对原始模式进行反向搜索的模式。但是,我发现当您对多个模式使用-o选项时,没有输出

还有其他想法吗


更新:经过进一步的实验,我发现是-I和-o选项的组合阻止了输出。不幸的是,在此上下文中,我需要一个不区分大小写的搜索。

将存储过程列表提供给egrep,以“|”分隔

或:


将存储过程列表馈送到egrep,以“|”分隔

或:


我过去也不得不这么做。不要忘记任何可能从其他进程调用的进程。 如果您使用的是SQL Server,则可以使用:

选择名称, 文本 从sysobjects A 加入sysb 在A.id=B.id上 其中xtype='P'
像“%$sproc name>%”这样的文本

我过去也必须这样做。不要忘记任何可能从其他进程调用的进程。 如果您使用的是SQL Server,则可以使用:

选择名称, 文本 从sysobjects A 加入sysb 在A.id=B.id上 其中xtype='P'
和“%$sproc name>%”之类的文本

我在编辑中描述的情况下获得输出:

$ echo "aaaproc1bbb" | grep -Eo 'proc1|proc2'
proc1
$ echo $?
0
$ echo "aaabbb" | grep -Eo 'proc1|proc2'
$ echo $?
1
退出代码显示是否存在匹配项

您可能还会发现
grep
的这些选项很有用(
-L
可能特定于GNU grep):

对于包含任何过程的文件名列表(不区分大小写):

要列出文件并显示匹配项(不区分大小写),请执行以下操作:


我在编辑中描述的情况下获得输出:

$ echo "aaaproc1bbb" | grep -Eo 'proc1|proc2'
proc1
$ echo $?
0
$ echo "aaabbb" | grep -Eo 'proc1|proc2'
$ echo $?
1
退出代码显示是否存在匹配项

您可能还会发现
grep
的这些选项很有用(
-L
可能特定于GNU grep):

对于包含任何过程的文件名列表(不区分大小写):

要列出文件并显示匹配项(不区分大小写),请执行以下操作:


从您的过程名称列表开始。为了便于以后重用,请对它们进行排序并使其小写,如下所示:

tr "[:upper:]" "[:lower:]" < list_of_procedures | sort > sorted_list_o_procs
请注意fgrep的用法:这些不是regexp,真的,那么为什么要这样对待它们呢。希望您也会发现,这神奇地纠正了您的输出问题;)。现在你有一个丑陋的使用程序列表。让我们按照上面的原始列表来清理它们

tr "[:upper:]" "[:lower:]" < list_of_used_procs | sort -u > short_list

。。。它们就在这里。

从您的过程名称列表开始。为了便于以后重用,请对它们进行排序并使其小写,如下所示:

tr "[:upper:]" "[:lower:]" < list_of_procedures | sort > sorted_list_o_procs
请注意fgrep的用法:这些不是regexp,真的,那么为什么要这样对待它们呢。希望您也会发现,这神奇地纠正了您的输出问题;)。现在你有一个丑陋的使用程序列表。让我们按照上面的原始列表来清理它们

tr "[:upper:]" "[:lower:]" < list_of_used_procs | sort -u > short_list

。。。它们就在那里。

例如,谢谢。我需要做更多的研究,以找出为什么我没有得到预期的输出。例如,谢谢。我还需要进一步研究,以找出为什么我没有得到预期的输出。什么版本的
grep
,什么shell(和版本),以及什么发行版?您是否使用
-v
作为
grep
的选项之一?请参阅我编辑的答案。什么版本的
grep
,什么shell(和版本),以及什么发行版?您是否使用
-v
作为
grep
的选项之一?查看我编辑的答案。+ 1检查其他地方的建议-但不要停止与其他进程,但也考虑工作,DTS/SSIS包,报告客户等。见鬼,我见过将字符串串联起来形成存储过程名称的旧代码(糟糕)。:)+1检查其他地方的建议-但不要停止与其他进程,但也考虑工作,DTS/SSIS包,报告客户等。见鬼,我见过将字符串串联起来形成存储过程名称的旧代码(糟糕)。:)
tr "[:upper:]" "[:lower:]" < list_of_procedures | sort > sorted_list_o_procs
fgrep -o -i -f sorted_list_o_procs source1 source2 ... > list_of_used_procs 
tr "[:upper:]" "[:lower:]" < list_of_used_procs | sort -u > short_list
fgrep -v -f short_list sorted_list_o_procs