使用“grep”和其他实用程序

use*_*389 2 command-line grep sort text-processing

我知道这是一个看似奇怪的问题,但我想更好地理解使用 Linux 实用程序,所以我将要求一些对我来说似乎相当复杂的东西来更好地理解工作中的机制。

考虑到我们系统中的所有头文件,我如何在终端中显示基于其中定义的宏数量的这些文件的排序列表?

Mar*_*ski 5

这应该可以解决问题:

for file in $(find /usr/include/ -name '*.h'); do
  echo "$file,$(grep -c '#define' $file)"; done \
  | sort -n -k2 -t, -r
Run Code Online (Sandbox Code Playgroud)
  • 查找列表匹配 /usr/include/*.h 模式的所有文件
  • 打印文件名、逗号和匹配“#define”模式的行数
  • 按数字排序,使用逗号作为第二个字段的分隔符(相反顺序)。

您可以追加| head -10以获取前 10 个文件。

  • 你可以改进这个:`grep -cR '^#define' /usr/include/ --include '*.h' | sort -nrt: -k2` - 这在某种程度上更安全​​,可以防止空格等(通常不应该在 $(find ..)` 中执行 `for f,并且在使用时当然不能不引用 `"$f"` . (2认同)