Linux:如何在文件名中获取三个字符的字符串?

nimxete2  于 2023-11-17  发布在  Linux
关注(0)|答案(3)|浏览(98)

我有数以百计的文件名格式,如:

3016-002+26797_+20220428+142340+0000000002+0000000001+0000000028.dcmzzz
3016-002+26797_+20220428+142340+0000000002+0000000001+0000000240.dcmzzz
3016-002+26797_+20220428+142340+0000000002+0000000001+0000000372.dcmzzz

字符串
我只想得到“.dcmzzz”扩展名之前的前三个数字,所以在这种情况下,我将剩下028,240和372(如果它是一个两位数,请确保保持前导零)。我想这可能与printf有关,但我不知道如何格式化它。有人能给我一个建议,如何实现这一点?谢谢!

wztqucjr

wztqucjr1#

请在文件所在的目录下运行:

ls | grep -oP '\d{3}(?=\.dcmzzz)'

字符串

输出:

028
240
372

ckx4rj1h

ckx4rj1h2#

仅使用bash

for n in 3016*; do echo "${n: -10: 3}"; done

字符串

km0tfn4u

km0tfn4u3#

您可以使用sed来完善这些方法,只需将目录列表通过管道传输到sed表达式即可。
如果使用 Basic Regular Expressions(BRE),您可以执行以下操作:

ls | sed 's/^.*\([0-9]\{3\}\).dcmzzz$/\1/'

字符串
使用 Extended Regular Expressions(ERE),您可以避免转义反向引用组和重复,

ls | sed -E 's/^.*([0-9]{3}).dcmzzz$/\1/'


在这两种情况下,输出都是您请求的,例如:

$ ls | sed -E 's/^.*([0-9]{3}).dcmzzz$/\1/'
028
240
372


使用POSIX和高级shell。

相关问题