如何更改grep查看文件/打印结果的顺序?

14

我有一个目录,里面有许多以数字为文件名的文件。它们没有前导零,所以如果我在该目录中运行grep hello *,可能会得到类似以下的结果:

22:hello, world!
6:hello
62:"Say hello to them for me."

我更愿意结果是这样的:

6:hello
22:hello, world!
62:"Say hello to them for me."

我最初想到的是使用 grep hello * | sort -n 命令按数字对结果进行排序,但这样会失去 grep 的颜色输出,而我希望保留它。有什么好的方法可以做到这一点吗?


我建议将标题更改为“如何在grep中不丢失颜色”或类似的内容。在问题文本(描述)中保留当前标题。这样,人们就不会错误地重定向问题到这里。对于社区来说,这是更好的,因为它是一个在搜索中排名较高的问题。 - Sohail Si
2个回答

12
ls * | sort -n | xargs -d '\n' grep hello

4
谢谢!那么xargs命令的作用是获取标准输入,按换行符切分,并将结果作为参数附加到“grep hello”命令上,是这样吗? - Pandu
@pandubear 是的,完全正确。没说错。 - John Kugelman
你也可以在 grep 命令中添加 -H 选项,以打印每个匹配项的文件名(以获得与 grep -R 相同的输出)。 - botchniaque
@ShichengGuo,你能把那个作为一个新问题发布吗? - John Kugelman
对我来说,sort --version-sort 的效果更好,所以 @JohnKugelman 的命令应该是 ls * | sort --version-sort | xargs -d '\n' grep hello - zergussino

4
啊--grep在输出管道时不会显示颜色(这可能是一件好事)。但是可以通过提供--color=always来覆盖此行为,从而使| sort -n的方法生效:
grep --color=always hello * | sort -n

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接