如何仅从另一个目录中的文件名中获取数字?仅使用sed
awk
或bash
?假设它可以是任意长度,但格式始终为 ABC1234。
如果我有文件名ABC1311.crs
,那么我只想要1311
.
我试过了:
number=`awk -F '[]' '{print $2}' $data/ABC123.crs
答案1
这似乎是一个奇怪的要求,但要从任意文件名中提取数字,您可以使用参数扩展从文件名中删除任何非数字的内容:
for f in *
do
printf '%s\n' "${f//[![:digit:]]/}"
done
答案2
我会用grep
:
grep -Eo '[0-9]+' file.txt
答案3
您可以通过以下命令获取数字:
echo * | grep -o '[[:digit:]]*'
如果您愿意,可以替换echo *
为。ls
如果您只想使用awk
,那么您可以执行以下操作:
\ls | awk 'match($0, /[[:digit:]]+/) {print substr($0, RSTART, RLENGTH)}'
\ls
将列出目录中的所有文件,但awk
仅打印第一组数字。如果您的文件包含多个数字字符串(例如2043x924_fjnndkk.jpg
),则只会输出2043
.
\ls
如果您的ls
别名是某物,则使用;否则,普通的ls
就足够了。就我而言,我已使用别名ls
(ls -s
以及其他选项),因此始终会打印出干扰此命令的尺寸。