bash模式问题

bash模式问题

我的目录中有一些文件,其文件名包含数字,其中一些以“d”字符结尾(不一定是扩展名)。以下是一组文件示例:

alle5m6ilsd.d
alle34mails
alle34mailsd
allemails
allemails.d

我想编写 UNIX bash 命令来选择包含数字并以“d”结尾的文件名。所以我的答案应该是:

alle5m6ilsd.d 
alle34mailsd 

答案1

您可以使用 glob 模式:

*[[:digit:]]*d
  • *匹配零个或多个字符

  • [:digit:]匹配您中的任何数字locale

  • d匹配字面意思d,在最后

如果您不想仅依赖locale, 对于 ASCII 字符集:

*[0-9]*d

例子:

% ls               
alle34mails  alle34mailsd  alle5m6ilsd.d  allemails  allemails.d

% ls *[[:digit:]]*d
alle34mailsd  alle5m6ilsd.d

答案2

更正后的模式应该是:

*[[:digit:]].*d$

或者

*[0-9].*d$

添加来自heemayl的描述,只需要匹配一个数字即可满足OP的那部分要求。然后需要接受 digital 之后的任意数量的其他字符.*,其中可能包括其他数字。然后必须有一个文字d,但它必须锚定到字符串的末尾$。 heemayl 的模式将无法匹配 OP 的两个示例,并且根据 OP 的条件,会错误地匹配d直接在数字后面(不一定在末尾)的任何内容。

相关内容