繁体   English   中英

在 ls (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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM