我需要列出所有具有 alien.digits 数字的文件名可以从 1 到多个,但如果它是任何其他东西的混合物,如 alien.htm、alien.1php、alien.1234.pj.123、外星人.123.12,外星人.12.12p.234htm
我写道: find home/jassi/ -name "alien.[0-9]*" 但它不工作并且它匹配一切。
有什么解决办法吗?
我想你想要的是
find home/jassi/ -regex ".*/alien\.[0-9]+"
使用-name
选项,您无需指定正则表达式,而是指定glob 模式。
请注意,find 期望整个路径与正则表达式匹配。
试试这个:find home/jassi/ -name "alien\.[0-9]+$"
它将匹配所有包含alien.
并以至少一位数字结尾但仅以数字结尾的文件。该$
字符表示字符串的结尾。
*
修饰符表示前一个匹配的 0 个或多个,并且表示.
任何字符,这意味着它正在匹配alien
。
试试这个:
alien\.[0-9]+$
+
修饰符表示前一个匹配项的 1 个或多个,并且已.
转义为文字字符,$
末尾的 the 表示“字符串结尾”。
^
如果您想确保只有与您的正则表达式完全匹配的文件,您还可以在正则表达式的开头添加一个。该^
字符的意思是“字符串的开头”,所以^alien\.[0-9]+$
会匹配alien.1234
,但不会匹配not_an_alien.1234
。
它对我有用:find home/jassi/ type -f -regex ".*/alien.[0-9]+"
我必须提供 type -f 来检查它是否是一个文件,否则它会显示同名的目录。
谢谢bmk。我只是想通了,同时你的反应完全一样。伟大的!