我是Linux的新人。我有个问题: 我在目录中有一堆文件,例如: ABC-188_1.out ABC-188_2.out ABC-188_3.out
如何从这些名字中获取数字188?
答案 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]/}
这里有两件事情很复杂:
以递归方式对目录的内容执行此操作。这是通过bash for循环来完成的(请注意,变量文件将当前工作目录中的每个文件的名称一个接一个地作为值)
for file in
ls *
; do (commands you want done for every file in the CWD, seperated by ";"); done
文件名中有多个数字,您只需要第一个。
因此,我们将空格留在中,并将结果(仅为当前文件名中的数字和空格)传递给另外两个命令ls *
(删除前导和尾随空格)和xargs
(返回只留下第一个剩余空格之前的字符串部分,即我们文件名中的第一个数字),
我们将结果字符串保存在变量&#34; out&#34;并使用cut -d' ' -f1`
,
echo $out
请注意,该数字仍为字符串数据类型。如果需要,可以使用前面带有$ out=
echo "${file//[!0-9]/ }"|xargs|cut -d' ' -f1
; echo $out