如何计算字符串/子字符串在Unix中某个目录的文件名中出现的实例数?

时间:2015-03-02 21:45:58

标签: linux bash unix directory filenames

假设我当前的工作目录名为my_dir,我有几个不同的文件:

file1
file_dog
filedog_1
dog_file

如何计算我的目录中出现“dog”(应该是3)的实例数?

谢谢!

2 个答案:

答案 0 :(得分:1)

您可以使用grep

中的-c选项
grep -c:
   Suppress normal output; instead print a count of matching lines for each input file.

ls -1 | grep -c dog

或:

ls -1 *[dD][oO][gG]* | wc -l

答案 1 :(得分:1)

即使文件名包含换行符,以下解决方案仍然有效:

$ touch  file1 file_dog filedog_1 dog_file
$ find . -maxdepth 1 -name '*dog*' -print0 | grep -zc .
3

工作原理:

  • find . -maxdepth 1 -name '*dog*' -print0

    这将查找当前目录中名称为dog的所有文件,并将其打印在以空分隔的列表中。由于nul字符是文件名中不允许的少数字符之一,因此这是安全的。如果您想要不区分大小写的匹配(以便Dog也匹配),请将-name替换为-iname

  • grep -zc .

    这将读取一个以分隔开的列表并对行进行计数。

    • -z告诉grep输入是分开的

    • -c告诉grep取消正常输出并计算匹配数

    • .告诉grep匹配任何内容。