假设您有一组文件:
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
但我希望它只列出字符串的第一部分。
答案 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]
所需的任何内容
答案 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