[英]Issue with RegEx in matching timestamp in filename in Linux bash
[英]Matching filename in ls (bash)
我有以下文件
tcpdump-12
tcpdump-12.delay
tcpdump-24
tcpdump-24.delay
有没有办法只ls
文件
tcpdump-12
tcpdump-24
我可以
ls tcpdump-[[:digit:]][[:digit:]]
但我正在寻找可以采用任意数字的更通用的东西,比如 tcpdump-[0-9]+ 如果我使用 vim 或 python 正则表达式。
需要启用bash的扩展glob功能才能使用高级模式匹配。
$ ls
tcpdump-12 tcpdump-12.delay tcpdump-24 tcpdump-24.delay
$ shopt -s extglob
$ ls tcpdump-+([[:digit:]])
tcpdump-12 tcpdump-24
如果您确定所有不需要的文件以“.delay”结尾,则可以执行以下操作:
ls --ignore '*.delay'
我不确定你为什么使用[[:digit:]]
而不是[0-9]
; 你是否齐心协力,文件名可能包含其他类型的数字?
大多数其他答案都很好,但一个快速而肮脏的解决方案是:
ls tcpdump-*[0-9]
它适用于您拥有的特定文件集,但它也会匹配文件名,如tcpdump-FOO7
。
在通用脚本中,值得精确匹配您想要的模式。 在一个简短的交互式shell命令中,恰好适用于当前情况的草率快捷方式可能很有用。
您可以将ls的输出传输到grep中。 Grep有一个“反转”选项(显示不匹配的行),所以你可以这样做:
ls tcpdump-* | grep -v '\.delay$'
如果您不介意通过外部过滤器传递它们,您可以使用:
ls -1 tcpdump-* | grep '^tcpdump-[0-9]*$'
请记住,这最终会给你一条线而不是一个漂亮的多柱状ls
输出。
如果您正在处理该列表,那就不会太重要,但是,如果您只是想在目录列表中看到这些文件,那就不够好了。 我假设前者,否则,这个问题并不属于SO :-)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.