Bash 如何强制grep只返回文件而忽略目录?
我正在尝试使用grep在用户的bin文件夹中自动定位bibtex程序 问题是,它经常返回一个名为bibtex的目录,这意味着脚本无法自动运行该命令 我如何强制grep(实际上是locate命令)自动忽略目录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
编辑:当前命令是:
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'
)。