forpop中的grep在git-bash中没有按预期运行

时间:2017-10-18 23:32:07

标签: shell grep windows-10 git-bash

我在一些C#代码中调用了一组存储过程(SP)。我只是想找到哪些C#文件使用这些SP的行。

我已经安装了git-bash,并且正在Win10环境中工作。

无论我尝试什么,grep都不会吐出任何内容,或者吐出每个具有匹配记录的文件的全部内容。我只想要文件名 和SP正则表达式匹配的行号。

在终端中,这就是我所做的:

procs=( $(cat procs.txt) ) #load the procs into an array

echo ${#procs[@]} #echo the size to make sure each proc got read in separately
output: 235

files=( $(find . -type f -iregex '.*\.cs') ) #load the file paths into an array, 
                                     #this similarly returns a filled out array
output: #over 1000

我也尝试过这个变体,删除路径中的初始'./',认为相对路径导致了问题

files=( $(find . -type f -iregex '.*\.cs' | sed 's/..//') )

其余的是一个简单的嵌套for循环:

for i in ${procs[@]}
do
   for j in ${files[@]}
   do
      grep -nie "$i" "$j"
   done
done

我已经尝试了这个基本思想的许多其他变体,比如将grep输出重定向到文本文件,添加和减去标志, 引用和取消引用变量等。

我也试过这种方法,但同样不成功

for i in ${procs[@]}
do
    grep -r --include='*.cs' -F $i
    #and i also tried
    grep -F $i *
done

此时我觉得有一些我不明白git-bash如何在windows环境中运行的东西,因为它现在似乎已经有用了。

感谢您的帮助。

修改

因此,经过几个小时的痛苦,我终于得到了它的工作:

for i in "${!procs[@]}"
do 
   for j in "${!files[@]}"
   do 
      egrep -nH $(echo "${procs[$i]}") $(echo "${files[$j]}") 
   done 
done

我查了一下,我的git-bash版本是gnu-bash 4.4.12(1) x86_64-pc-msys

我仍然不确定为什么git-bash需要这样奇怪的引用和回声才能使一切正常运行。在debian linux上它只使用了一个简单的

for i in ${procs[@]}
do
   for j in ${files[@]}
   do
       grep $i $j
   done
done

运行此版本的bash:GNU bash, version 4.4.12(1)-release (x86_64-pc-linux-gnu)

如果有人能告诉我为什么git-bash行为如此奇怪,我仍然想知道答案。

0 个答案:

没有答案