【问题标题】:Create a command to display extensions of regular files in current directory with counts to each extension. Files without extension should be ignored创建一个命令以显示当前目录中常规文件的扩展名以及每个扩展名的计数。没有扩展名的文件应该被忽略
【发布时间】:2021-07-27 10:24:03
【问题描述】:

假设你的当前目录中有这些文件:

ifsmy12@cloudshell:~/3300/tests/t2/testers (cs3300-301722)$ ls
bar  emp.lst  foo  q5.sh  q6.sh  q7.sh  q8.sh

我想要的输出是:

      1 lst
      4 sh

我能够打印出具有如上所示计数的文件扩展名,但是我无法完全弄清楚如何排除没有扩展名的文件。有人可以告诉我哪里出错或我错过了什么吗?我将在下面提供我的命令和输出:

ifsmy12@cloudshell:~/3300/tests/t2/testers (cs3300-301722)$ find . -type f | sed 's/.*\.//' | sort | uniq -c
      1 /bar
      1 /foo
      1 lst
      4 sh

提前谢谢你。

【问题讨论】:

  • 我想你可以在你的 find 子句中添加-name '*\.*'

标签: regex linux unix sed terminal


【解决方案1】:

您可以使用一个模式来匹配至少一个.,然后匹配除./ 之外的任何字符的1 次以上,直到字符串$ 结束为止

.*\.[^/.]+$

例如

find . -type f -regex '.*\.[^/.]+$' | sed 's/.*\.//' | sort | uniq -c

输出

1 lst
4 sh

【讨论】:

    【解决方案2】:

    这可能对你有用(GNU sed):

    find . -type f | sed -n 's/.*\.//p' | sort | uniq -c
    

    对于 sed 命令:打开需要显式打印的 -n 选项,然后使用替换标志 p 来打印成功的替换。

    【讨论】:

      猜你喜欢
      • 2013-05-07
      • 1970-01-01
      • 2012-12-24
      • 2018-08-06
      • 1970-01-01
      • 2016-12-24
      • 1970-01-01
      • 2018-05-25
      • 1970-01-01
      相关资源
      最近更新 更多