如何使用grep获取某些文件名?

时间:2013-10-12 17:56:51

标签: regex bash shell unix grep

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

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来获取以“customer”开头的某些文件名。我试过这个

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 个答案:

答案 0 :(得分:1)

您可以尝试:

ls customer_[fm]*

ls customer_[^r]*

答案 1 :(得分:1)

使用grep -v过滤掉您不想要的内容。

ls customer* | grep -v '^customer_rows'

答案 2 :(得分:1)

使用grep

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

使用find命令

find . \! -iname "customer_rows*"

答案 3 :(得分: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