【问题标题】:How to filter files in directory in linux如何在linux中过滤目录中的文件
【发布时间】:2012-02-25 23:50:06
【问题描述】:

如何在主目录中显示个人目录下所有文件的类型
那:

  1. 不要以某些字母开头,例如ak
  2. 并且他们名字中的第三个字母不是数字也不是字母 (大写或小写)

【问题讨论】:

标签: linux shell command-line directory


【解决方案1】:

用正则表达式试试 grep:

ls -1 | grep -ve "^a\|^k\|^..[0-9]\|^..\w" | cut -d . -f 2

-v: 否决匹配 -e:使用正则表达式

-1 是为了确保一行中没有多个文件。

正则表达式的意思是:

  1. ^a\|^k:开头没有ak
  2. ^..[0-9]:第三个位置没有数字(. 是一个位置的通配符)
  3. ^..\w:第三个位置没有单词(字符或_)。

它有点长,但我认为它是一种深入研究正则表达式的 goog 方式。有关正则表达式的更多详细信息,请查看例如 here

cut 命令查找分隔符 . 并打印它的第二部分 (-f 2)。

【讨论】:

  • “第二部分”可能不是 OP 所追求的扩展。 Filenames.can.have.a.lot.of.dots.in.them.txt
  • @mvds:在这种情况下,sed 将是一个更好的解决方案。就像你所做的那样;)
【解决方案2】:

如果你所说的“类型”是指扩展:

$ ls | egrep '^[^ak].[^a-zA-Z0-9]' | sed -e s/.*\\.//

[^a-zA-Z0-9] 有简写,但这个很容易理解和适应。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-09-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-24
    相关资源
    最近更新 更多