Unix命令或短python脚本列出文件,但不重用具有类似字符串的文件?

时间:2013-03-21 22:44:40

标签: unix

假设您有一组文件:

a_1 a_2 a_3
b_1 b_2 b_3
c_1 c_2 c_3

有没有办法通过命令shell列出每个字符串的一部分,只列出一次,即:a,b,c?

我知道你可以把它列入清单

a_1, b_1, c_1

但我希望它只列出字符串的第一部分。

2 个答案:

答案 0 :(得分:0)

尝试这样做:

cd /path/where/files/exists
printf -- '%s\n' a_[1-3] b_[1-3] c_[1_3] 

cd /path/where/files/exists
ls -l a_[1-3] b_[1-3] c_[1_3] 

the globs

所需的任何内容

答案 1 :(得分:0)

由于其管道设计,Unix shell非常强大。

没有ls选项可以执行您所要求的(我知道的),但使用管道构建解决方案非常简单。

ls | awk '{print sub(/_.*/, "", $0); print $0}' | sort -u
 |     |                              |            |
 |     |                              |            > sorts output and makes it unique
 |     |                              > prints what is left of each line, after sub
 |     > sub(...) turns a_...., into just 'a', etc
 > create you list of files

抱歉没有时间为此建立测试。如果您收到语法错误,请发表评论,我会尝试修复代码。

有一件事是非常" nard-coded"这是将被删除的正则表达式/_.*/。这意味着,"找到' _' char,然后是"之后的所有字符,然后"用"""中的值替换它们,在这种情况下是空字符串,有效地删除后缀部分字。 (尝试"x"而不是""来看看我的意思。)

如果您的文件列表不像您的示例那么简单,您可能需要创建一个新的reg-exp来替换您想要删除的后缀部分。

如果您不熟悉管道,通过一次添加一个管道集来实验很容易,看看每个步骤如何修改输出。 IHTH