如何从文件名中提取数字

如何从文件名中提取数字

如何仅从另一个目录中的文件名中获取数字?仅使用sed awkbash?假设它可以是任意长度,但格式始终为 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就足够了。就我而言,我已使用别名lsls -s以及其他选项),因此始终会打印出干扰此命令的尺寸。

相关内容