如何将grep的输出限制为每个文件只有一行?
(因为这是一个shellcript函数的一部分,我可以使用所有东西,但是我太苛刻了,无法弄清楚如何以正确的方式管道特定部分。)
我正在尝试编写的函数基本上是“给定一个字符串,显示每个文件(在此目录和所有子目录中),其中包含它并显示这些文件的列表作为可点击链接”
(顺便说一下。你能不能给我提示脚本/命令,这样做的是什么?)
如果您有兴趣:.bashrc中的函数是: (并且应该像:“foobar”)
function where(){
grep -rHoiIm1 "$@" | cut -d":" -f1-1 | asURL
}
function asURL() {
PREFIX="file://$(pwd)/";
sed "s*^*$PREFIX*" |
sed 's/ /%20/g';
}
答案 0 :(得分:3)
如果您只对匹配文件的路径感兴趣,请使用-l
/ --files-with-matches
选项:
function where(){
grep -riIl "$@" | asURL
}
请注意,在您使用-l
后,我已经省略了几个不再适用的选项。
顺便说一句:虽然您的asUrl()
功能在简单的情况下可以正常工作,但它并不完全健壮,并且可能导致无效的网址。除此之外,两个调用sed
没有理由;只需将两个s
调用串在一个脚本中,并以;
分隔。
答案 1 :(得分:2)
将-l
选项添加到grep,告诉它仅输出文件名。
-l </ P>
- 文件与 - 匹配
抑制正常输出;而是打印每个输入文件的名称 通常会打印哪个输出。扫描每个文件 第一场比赛停止。 (-l由POSIX指定。)