Bash 如何强制grep只返回文件而忽略目录?

Bash 如何强制grep只返回文件而忽略目录?,bash,unix,grep,locate,Bash,Unix,Grep,Locate,我正在尝试使用grep在用户的bin文件夹中自动定位bibtex程序 问题是,它经常返回一个名为bibtex的目录,这意味着脚本无法自动运行该命令 我如何强制grep(实际上是locate命令)自动忽略目录 编辑:当前命令是:locate bibtex | grep”/bibtex$“-d skip | head-n1查找命令 find /bin -name bibtex -type f 查找类型为“f”的文件名“bibtex”,这是一个常规文件 locate --basename '\bib

我正在尝试使用grep在用户的bin文件夹中自动定位bibtex程序

问题是,它经常返回一个名为bibtex的目录,这意味着脚本无法自动运行该命令

我如何强制grep(实际上是locate命令)自动忽略目录


编辑:当前命令是:
locate bibtex | grep”/bibtex$“-d skip | head-n1
查找命令

find /bin -name bibtex -type f
查找类型为“f”的文件名“bibtex”,这是一个常规文件

locate --basename '\bibtex' --limit 1
消除了对
grep
head
的需要,但仍然无法解决结果是否为目录的问题

你为什么不:

type -P bibtex
哪个程序会在
路径中查找该名称的程序?

唉,不是我最干净的,但它可以工作<代码>perl-ne'chomp($f=$);打印如果-d$f'


这使得您的命令
locate bibtex | perl-ne'chomp($f=$);打印如果-d$f'| grep“/bibtex$”-d skip | head-n1

我不太明白,所以可能我的解决方案是错误的:为什么不使用?或者bibtex不在PATH中?

icecreamhead,立即接受这个答案,因为您的搜索已经结束:-)这个答案确实有效,但它需要比locate长很多,在这种情况下locate并不理想
-d skip
在这里不执行任何操作,因为
grep
的输入是
stdin
。您可以将命令缩短为
perl-ne'chomp;打印如果-d'
这是我第一次运行它,但我不确定丢失的换行是否会在以后的管道链中引起问题。我想我是个神经紧张的人。顺便说一句,你可以把它缩短为
perl-lne'print if-d'
(如果是
perl-lne'chomp,那么chomp似乎不是必需的;如果是,则打印!-d'
)。