Ubuntu下用grep正则匹配数值文件名且仅排除单独0文件的方法
解决方案
你可以选择以下任意一种方式实现需求,两种都经过测试可以输出你期望的结果:
方法1:组合命令(更易读,不易出错)
在原有匹配逻辑后追加整行排除单独0的逻辑即可:
ls | grep -E '^[-+]?[0-9]*\.?[0-9]+([eE][-+]?[0-9]+)?$' | grep -vx '0'
参数说明:
- 第一个grep新增了
^行首、$行尾锚点,确保只匹配整行都是数值格式的文件名,避免误匹配到包含数字的非纯数值文件名(比如a1、1v这类) - 第二个grep的
-v参数表示反向过滤,-x参数表示要求整行完全匹配,只会排除文件名恰好是0的条目,不会影响0.1、10这类包含0的文件名
方法2:单条正则实现
通过否定前瞻断言直接在匹配规则里排除单独的0:
ls | grep -E '^(?!0$)[-+]?[0-9]*\.?[0-9]+([eE][-+]?[0-9]+)?$'
其中(?!0$)是否定前瞻规则,表示行首之后不能是0加行尾,也就是直接排除文件名恰好为0的情况,其余逻辑和你原有正则一致,同样加了行首行尾锚点避免误匹配。
内容的提问来源于stack exchange,提问作者user8458838
相关产品推荐
相关产品推荐

