2013-02-23 2 views
2

В сценарии sh я пытаюсь перебрать все файлы, соответствующие следующему шаблону
abc.123 в основном abc. за которыми следуют только цифры, число, следующее за ., может быть любой длины.
Использованиесопоставление шаблонов при использовании команды ls в скрипте bash

$ shopt -s extglob
$ ls abc.+([0-9])

делает работу, но на терминале, а не по сценарию. Как я могу получить только файлы, соответствующие шаблону?

+1

Вы уверены, что скрипт запускается с 'bash', а не' sh'? – chepner

+0

спасибо за это. это сценарий sh – keeda

ответ

1

Если вы используете sh и не bash, и, вероятно, вы также хотите быть POSIX совместимыми, вы можете использовать:

for f in ./* 
do 
    echo "$f" | grep -Eq '^\./abc.[0-9]+$' && continue 
    echo "Something with $f here" 
done 

Он отлично работает с именами файлов с пробелами, кавычками и т. Д., Но может соответствовать некоторым f ilenames с линиями в них, которые не должны.

Если вы отметили свой вопрос bash, потому что используете bash, просто используйте extglob, как описано.

2

, если я прямо вас понял, образец может быть переведен на регулярное выражение:

^abc\.[0-9]+$ 

, чтобы вы могли

ls продолжать использовать и Grep выход. например:

ls *.*|xargs -n1|grep -E '^abc\.[0-9]+$' 

или использовать find

находки имеет возможность -regex