使用find,wc和sed来计算行数

Ber*_*own 24 bash sed find wc

我试图使用sed根据特定扩展计算所有行.

find -name '*.m' -exec wc -l {} \; | sed ...
Run Code Online (Sandbox Code Playgroud)

我正在尝试执行以下操作,如何在此特定行中包含sed以获取总计.

Emm*_*NAT 48

你也可以从wc获得漂亮的格式:

wc `find -name '*.m'`
Run Code Online (Sandbox Code Playgroud)

  • 添加`-type f`以避免匹配目录名的情况:`wc $(find -type f -name'*.m')` (9认同)
  • wc $(find -name'*.m')比较漂亮. (2认同)

Dan*_*mes 13

这里的大多数答案对大量文件都不适用.如果文件名列表对于单个命令行调用来说太长,则某些文件名会中断,而其他文件名效率低,因为-exec为每个文件启动一个新进程.我相信一个强大而有效的解决方案是:

find . -type f -name "*.m" -print0 | xargs -0 cat | wc -l
Run Code Online (Sandbox Code Playgroud)

使用cat这种方式很好,因为它的输出直接输入,wc所以只有少量文件的内容一次保存在内存中.如果单个调用的文件太多cat,cat将多次调用,但所有输出仍将通过管道传输到单个wc进程中.

  • 或者使用标准/便携式形式:`find . -type f -name '*.m' -exec cat {} + | wc-l`。 (2认同)

sth*_*sth 6

您可以cat通过单个wc实例获取所有文件以获取总行数:

find . -name '*.m' -exec cat {} \; | wc -l
Run Code Online (Sandbox Code Playgroud)


Ale*_*nov 5

在现代GNU平台上,wc并从参数中找到-print0和-files0-这些参数可以组合成一个命令,该命令用于计算文件中行总数的行.例:

find . -name '*.c' -type f -print0 | wc -l --files0-from=-
Run Code Online (Sandbox Code Playgroud)