如何使用grep筛选仅含一个英文句点的文件名?
用Grep筛选仅含一个句点的文件名
当然可以用grep实现这个需求!核心是写一个精准的正则表达式,确保文件名里恰好只有一个英文句点,且这个句点既不在文件名开头也不在结尾。
实现命令
ls -1 | grep '^[^.]*\.[^.]*$'
正则表达式拆解
让我们逐个解析正则里的每个部分:
^:锚定到字符串开头,确保匹配从文件名的第一个字符开始[^.]*:匹配任意数量(包括0个)非句点的字符,对应文件名的“主名”部分\.:匹配一个实际的句点(.在正则中是通配符,必须用反斜杠转义才能匹配真实的句点)[^.]*:再次匹配任意数量非句点的字符,对应文件名的“扩展名”部分$:锚定到字符串结尾,确保整个文件名中没有多余的句点
效果验证
将你给出的文件名列表输入这个命令,会精准输出你想要的结果:
- 1234.txt
- 123.doc1
- 234.jpg
- 456.php
而包含多个句点的文件(如1234.txt.dev1)、无句点的文件(如tmp、tmppppp)都会被自动排除,完全符合预期。
小提示
如果你的文件名中包含空格或特殊字符,使用ls -1(数字1)强制每个文件名单独占一行,能避免grep匹配出错,这也是上面命令里用ls -1的原因。
内容的提问来源于stack exchange,提问作者Ricky
相关产品推荐
相关产品推荐

