从文件名中获取数值

时间:2015-08-10 16:00:28

标签: linux

我是Linux的新人。我有个问题: 我在目录中有一堆文件,例如: ABC-188_1.out ABC-188_2.out ABC-188_3.out

如何从这些名字中获取数字188?

1 个答案:

答案 0 :(得分:1)

假设(因为你在linux上并正在使用文件),你将使用shell / bash-script ...(如果你使用不同的东西(比如python,...),解决方案会,当然,是另一个。)

...这将有效

for file in `ls *`; do out=`echo "${file//[!0-9]/ }"|xargs|cut -d' ' -f1`; echo $out; done

<强>解释

基本问题是从bash脚本中的字符串中提取一个数字(为此搜索stackoverflow,你会发现许多不同的解决方案)。

这是在上面的命令中完成的(要从中提取数字的字符串保存在变量文件中):

${file//[!0-9]/ }

或,没有空格

${file//[!0-9]/}

这里有两件事情很复杂:

  1. 以递归方式对目录的内容执行此操作。这是通过bash for循环来完成的(请注意,变量文件将当前工作目录中的每个文件的名称一个接一个地作为值)

    for file in ls *; do (commands you want done for every file in the CWD, seperated by ";"); done

  2. 文件名中有多个数字,您只需要第一个。 因此,我们将空格留在中,并将结果(仅为当前文件名中的数字和空格)传递给另外两个命令ls *(删除前导和尾随空格)和xargs(返回只留下第一个剩余空格之前的字符串部分,即我们文件名中的第一个数字), 我们将结果字符串保存在变量&#34; out&#34;并使用cut -d' ' -f1`

    打印

    echo $out

  3. 请注意,该数字仍为字符串数据类型。如果需要,可以使用前面带有$ out=echo "${file//[!0-9]/ }"|xargs|cut -d' ' -f1; echo $out

    的双括号将其转换为整数