2017-04-26 25 views

回答

1

grep -lr term dir/to/search/ | awk -F'/' '{print $NF}'应该这样做。

-l只是列出了文件名,包括他们的目录。

-r递归通过目录树和指定的目录中的所有文件。

这一切又通过管道输送到awk,这是告知使用/作为分隔符(而不是在文件名不允许的,所以不脆,因为它可以),并打印最后一个字段(NF是场算的,所以$NF是最后一个字段)

1
grep -Rl "content" | xargs -d '\n' basename -a 

这应该是诀窍,只打印没有路径的文件名。

基名打印文件名NAME去掉任何领先的目录组件 。

参考:https://linux.die.net/man/1/basename

+1

如果你有用于'-d'\ n''的GNU utils,那么你应该一路走下去并使用grep -Z和xargs -0。 –

3

为什么啊,为什么GNU的家伙给grep的一个选项,以递归查找文件时,有一个非常好的工具,设计的工作,具有极其明显的名称。叹息...

find . -type f -exec awk '/XYZ/{print gensub(/.*\//,"",1,FILENAME); nextfile}' {} + 

以上使用GNU awk,我假设你已经有了,因为你打算使用GNU grep。

相关问题