2015-08-31 84 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避免。它引入了许多问题,特别是当你的文件/目录包含空白时。使用bash内建水珠功能来代替:

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