2015-08-31 4 views
1

Я выполняю скрипт bash, который автоматически запускает симуляции для меня. Чтобы начать симуляцию, для этого другого скрипта нужен вход, который должен определяться именем папки.Номер извлечения из имени файла

Так что, если у меня есть имена папок No200, то я хочу, чтобы извлечь номер 200. До сих пор, что я имею

PedsDirs=`find . -type d -maxdepth 1` 
for dir in $PedsDirs 
do 
     if [ $dir != "." ]; then 
      NoOfPeds = "Number appearing in the name dir" 
     fi 
done 

ответ

2
$ dir="No200" 
$ echo "${dir#No}" 
200 

В общем, чтобы удалить использование префикса ${variable-name#prefix}; для удаления суффикса: ${variable-name%suffix}.


Дополнительный совет: избегать использования find. Это создает множество проблем, особенно когда ваши файлы/каталоги содержат пробелы. Используйте Баш встроенные функции функции Глоб вместо:

for dir in No*/   # Loops over all directories starting with 'No'. 
do 
    dir="${dir%/}"  # Removes the trailing slash from the directory name. 
    NoOfPeds="${dir#No}" # Removes the 'No' prefix. 
done 

Кроме того, старайтесь всегда использовать кавычки имена переменных, чтобы избежать случайного расширения (т.е. использовать "$dir" вместо просто $dir).

+0

Большое вам спасибо. –

0

Будьте осторожны, так как вам нужно присоединиться к = к имени переменной в bash. Чтобы получить только число, вы можете сделать что-то вроде:

NoOfPeds=`echo $dir | tr -d -c 0-9` 

(то есть, удалить все, голец, что это не число). Все номера будут тогда в NoOfPeds.

Смежные вопросы