J’ai des fichiers comme celui-ci dans un certain répertoire:
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$
Je veux utiliser grep pour récupérer certains noms de fichiers qui commencent par un mot “client”. J’ai essayé ça
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$
Mais cela me donne ces fichiers customer_rows. * Que je ne veux pas. Le jeu de résultats correct est
customer_full_20131201.txt customer_modified_20131201.txt
Comment y parvenir?
Utiliser grep
ls -1 | grep "^customer_[^r].*$"
Utilisation de la commande find
find . \! -iname "customer_rows*"
Tu peux essayer:
ls customer_[fm]*
ou
ls customer_[^r]*
Utilisez grep -v
pour filtrer ce que vous ne voulez pas.
ls customer* | grep -v '^customer_rows'
Avec Bash étendu globbing, vous pourriez dire
ls customer_!(rows)*
ou, plus probablement, quelque chose comme
for f in customer_!(rows)*; do : something with "$f" done
Avec shell POSIX ou Bourne traditionnel, vous pourriez dire
for f in customer_*; do case $f in customer_rows* ) continue ;; esac : something with "$f" done