【问题标题】:Display all files that begin with 3 digits [closed]显示所有以 3 位数字开头的文件 [关闭]
【发布时间】:2021-08-13 11:51:15
【问题描述】:

我需要在根目录中查找所有以 3 位数字开头的文件并使用 find 命令,到目前为止,我已经尝试使用 find . -type f -name '[[digit]]'*' | grep -E '.*/[100-999]+$',但它显示了完全不同的结果。我究竟做错了什么?我应该怎么做才能得到正确的结果?请帮忙

【问题讨论】:

  • 文件名以四位数开头怎么办? [100-999] 等于 [0-9],并且您的正则表达式要求文件名仅包含一位或多位数字。
  • 谢谢,完全误解了这个的用法
  • Maciek,请检查下面的答案,如果它适合您,请考虑接受答案。您还将获得 2 分接受。
  • echo /[0-9][0-9][0-9]*/ 中查找名称以三位数字开头的所有文件。你绝对不需要find

标签: linux grep find digits kali-linux


【解决方案1】:

请注意[100-999] 等于[0-9],并且您的正则表达式要求文件名仅包含一位或多位数字。此外,您错过了 POSIX 字符类定义中的冒号,如果您打算匹配 glob -name 模式中的数字,[[digit]] 必须看起来像 [[:digit:]]

如果您想查找名称以 3 位数字开头的文件(然后可以有任何内容,包括更多数字),您可以使用

find . -type f -name '[[:digit:]][[:digit:]][[:digit:]]*'
find . -type f -name '[0-9][0-9][0-9]*'
find . -type f -regextype posix-extended -regex '.*/[0-9]{3}[^/]*$'

注意:

  • find . -type f -name '[[:digit:]][[:digit:]][[:digit:]]*'find . -type f -name '[0-9][0-9][0-9]*' - 这里,名称“pattern”是一个匹配整个文件名的全局模式,因此它必须以 3 位数字开头,然后* 通配符匹配任何文本,直到文件名结束
  • find . -type f -regextype posix-extended -regex '.*/[0-9]{3}[^/]*$' - 如果您更喜欢使用正则表达式,或者将来扩展 - 它匹配任何文本直到最后一个 /,然后是 3 位数字和除 / 之外的任何文本直到字符串的末尾。 如果开头只能是三位而不是四位,则需要
find . -type f -regextype posix-extended -regex '.*/[0-9]{3}([^0-9][^/]*)?$'

这里,

  • .*/ - 匹配最后一个 / 字符,包括它
  • [0-9]{3} - 任意三位数
  • ([^0-9][^/]*)? - 非数字的可选出现,然后是 / 以外的零个或多个字符
  • $ - 字符串结束。

【讨论】:

  • 好奇[[:digit:]],有没有不支持[0-9]的shell?
  • 另外,您可以将[0-9]{3}([^0-9][^/]*)?$ 简化为[0-9]{3}[^0-9/]*$
  • @Sundeep 不,[0-9]{3}[^0-9/]*$ 不会匹配 123-good-name01.txt
  • 哦,好点...所有格量词会更容易..
  • 再次好点,我只是尝试了我认为可行的方法,但没有(尽管环顾有帮助)..我认为[^0-9]应该是[^0-9/],否则./123/-good-name01.txt会匹配
猜你喜欢
  • 1970-01-01
  • 2012-03-19
  • 1970-01-01
  • 2011-02-01
  • 1970-01-01
  • 2012-09-16
  • 1970-01-01
  • 1970-01-01
  • 2013-12-18
相关资源
最近更新 更多