0

我在某个目录中有这样的文件:

my@unix:~/kys$ ls
address_modified_20130312.txt   customer_rows_full_20131202.txt
customer_full_20131201.txt      customer_rows_modified_20131202.txt
customer_modified_20131201.txt
my@unix:~/kys$ 

我想使用 grep 来获取某些以“客户”开头的文件名。我试过这个

my@unix:~/kys$ ls | grep customer.*
customer_full_20131201.txt
customer_modified_20131201.txt
customer_rows_full_20131202.txt
customer_rows_modified_20131202.txt
my@unix:~/kys$

但这给了我这些我不想要的 customer_rows.* 文件。正确的结果集是

customer_full_20131201.txt
customer_modified_20131201.txt

如何做到这一点?

4

4 回答 4

1

你可以试试:

ls customer_[fm]*

或者

ls customer_[^r]*
于 2013-10-12T18:00:13.327 回答
1

用于grep -v过滤掉你不想要的东西。

ls customer* | grep -v '^customer_rows'
于 2013-10-12T18:00:23.193 回答
1

使用grep

ls -1 | grep "^customer_[^r].*$"

使用find命令

find . \! -iname "customer_rows*"
于 2013-10-12T18:17:55.080 回答
0

使用 Bash 扩展通配符,你可以说

ls customer_!(rows)*

或者,更有可能的是,类似

for f in customer_!(rows)*; do
    : something with "$f"
done

使用 POSIX shell 或传统的 Bourne,你可以说

for f in customer_*; do
    case $f in customer_rows* ) continue ;; esac
    : something with "$f"
done
于 2013-10-13T07:56:49.803 回答