回显特定文件,不包括某些字符

时间:2016-01-27 17:58:47

标签: unix echo

我有一个包含几个文件的文件夹,主要是这三个文件:

vmware-diskmanager
VMware-disklib.tar.gz
vmware-disklib-distrib

如果我想在没有.tar.gz扩展名的情况下回显这两个文件,我可以使用

# echo v*

但是我要说我有另一个档案

VMware-disklib

然后我可以使用

# echo [vV]*

获取所有四个文件,但是我可以用“不显示任何带有点的文件”的内容完成命令行吗?

2 个答案:

答案 0 :(得分:0)

使用bash

如果您使用bash,请参阅man bash EXPANSION > 路径名扩展> 模式匹配

  

如果使用extglob内置函数启用shopt shell选项,则会识别多个扩展模式匹配运算符。

(此选项似乎是默认选项。)特别是您可以使用:

  

!(pattern-list):
      匹配除了给定模式之外的任何内容

所以在你的情况下这可行:

echo [vV]!(*.*)

使用find

我使用zsh而不是bash,这不起作用。 我没有检查过zsh是否有相同的语法,我个人会找到find的解决方案:

find . -maxdepth 1 -iregex './v[^.]*' -exec echo -n "{} " \;

其中:

  • .是要搜索的目录
  • -maxdepth 1将搜索限制为当前目录(无递归)
  • -iregex './v[^.]*'将不区分大小写的正则表达式应用于当前目录中文件的整个路径
  • -exec echo -n "{}"表示在没有换行的情况下回显文件名(名称将替换{}占位符)
  • \;需要结束-exec命令。

它应该在开头用./打印文件名,最后不用换行符。但从好的方面来说,你可以使用正则表达式。

答案 1 :(得分:0)

您可以通过说明"不显示任何带有点的文件来完成命令行"。你需要在点之前逃避(使用反斜杠):

# echo [vV]* | grep -v "\."
相关问题