Shell脚本-循环文件名并提取文件名中的数字

Shell脚本-循环文件名并提取文件名中的数字,shell,awk,sed,Shell,Awk,Sed,使用LinuxShell脚本,我试图循环遍历目录中的所有文件名,并在处理文件之前从文件名中提取数字 大概是这样的: for files in `ls *.gz` do echo "Looking at... $files" gunzip $files echo "$files" | awk '/[0-9]/' ' {print $1}' echo "$files is unzipped" done 谢谢您的帮助。您可以替换文件

使用LinuxShell脚本,我试图循环遍历目录中的所有文件名,并在处理文件之前从文件名中提取数字

大概是这样的:

for files in `ls *.gz`
do
        echo "Looking at...  $files"
        gunzip $files
        echo "$files" | awk '/[0-9]/' ' {print $1}'
        echo "$files is  unzipped"
done

谢谢您的帮助。

您可以替换文件名中的所有非数字

echo "${files//[!0-9]/}"
如果文件名包含多行数字,这显然会产生串联数字。例如,
12a34.gz
变为
1234


这个替换机制是Bash特有的功能,不受纯
sh

的支持。您当前的代码有什么问题?循环和压缩显然与您的问题无关。也许编辑以关注您的实际问题。对于*.gz中的文件,循环显然应该是
。backticks中的
ls
不仅多余,而且可能有害。这给了我:{LB_RPC_07042014.txt.gz/[!0-9]/}{LB_RPC_07052014.txt.gz/[!0-9]/}{LB_RPC_07062014.txt.gz/[!0-9]/}{LB_RPC_07070707072014.txt.gz/[!0-9]/}你似乎把美元符号放错地方了。这是
${
而不是
{$