Shell脚本-循环文件名并提取文件名中的数字
使用LinuxShell脚本,我试图循环遍历目录中的所有文件名,并在处理文件之前从文件名中提取数字 大概是这样的: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 谢谢您的帮助。您可以替换文件
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]/}你似乎把美元符号放错地方了。这是${
而不是{$
。