0

假设您有一组文件:

a_1 a_2 a_3
b_1 b_2 b_3
c_1 c_2 c_3

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

我知道你可以把它列出来

a_1, b_1, c_1

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

4

2 回答 2

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”的一件事是将要删除的正则表达式。这意味着,“找到'_'字符,然后是之后的所有字符”,然后“将它们替换为""”中的值,在这种情况下是空字符串,有效地删除了单词的后缀部分。(试着把"x"而不是仅仅""为了明白我的意思)。

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

如果您不熟悉管道,可以很容易地进行实验,一次添加一个管道集,以查看每个步骤如何修改输出。IHTH

于 2013-03-22T00:18:18.583 回答
0

Try doing this :

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

or

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

or anything you want with the globs

于 2013-03-21T22:54:17.317 回答