我在下面以一种格式重命名了一组文件,如下所示;
ABCD.R9999.COMMON.D170401.T199665.txt
此处,ABCD
对于所有文件的开头都是必需的。任何内容都需要RR5526
或AB8673
替换为R9999
。
然后裁剪所有其他不需要的字段,并使用上述格式重命名该文件。
DH_062_FAT_HSC_H1666_EFTO.FH1666.COMMON.D170801.T0433417
DH_062_FAT_MMA_H0927_EFTO.FH0927.COMMON.D170801.T0433417
ABCD.FH2237.COMMON.D170701.T1549353
P.FH5526.COMMON.D130501.T1243225
FS3389.COMMON.D160901.T1539489
P.FH5587.COMMON.D150601.T1529158.7073202
EFTO.FH3890.COMMON.D170401.T1332005
H1737.COMMON.R201602.D160201.T1725587.txt
EFTO.RH3864.MSPCOBMA.D170421.T1246176
P.FH2225.COMMON.D170101.T1737084.12016373.txt
P.FH3204.COMMON.D170701.T1549353.txt_20170627_133012.txt
P.RH2312.COMMON.D110301.T1539063.13313178.txt.gz
我尝试过以下脚本来裁剪文件名;
#!/bin/bash
FILES=/path/to/*COMMON*
for i in $FILES
do
newarg="$(echo "$i" | sed 's/.FH\d{4}.COMMON.D\d{6}')"
if [ "$newarg" != "" ];then
mv "$i" "$newarg"
fi
done
答案 0 :(得分:2)
这里有一些代码可以完成我认为您想要做的事情,尽管您的描述仍然不完全清楚。
import re
data = '''\
DH_062_FAT_HSC_H1666_EFTO.FH1666.COMMON.D170801.T0433417
DH_062_FAT_MMA_H0927_EFTO.FH0927.COMMON.D170801.T0433417
ABCD.FH2237.COMMON.D170701.T1549353
P.FH5526.COMMON.D130501.T1243225
FS3389.COMMON.D160901.T1539489
P.FH5587.COMMON.D150601.T1529158.7073202
EFTO.FH3890.COMMON.D170401.T1332005
H1737.COMMON.R201602.D160201.T1725587.txt
EFTO.RH3864.MSPCOBMA.D170421.T1246176
P.FH2225.COMMON.D170101.T1737084.12016373.txt
P.FH3204.COMMON.D170701.T1549353.txt_20170627_133012.txt
P.RH2312.COMMON.D110301.T1539063.13313178.txt.gz
'''.splitlines()
pat = re.compile(r'(?:.*)(\.COMMON\..*$)')
for s in data:
z = pat.sub(r'ABCD.R9999\1', s)
if '.txt' not in z:
z += '.txt'
print(' In: {!r}\nOut: {!r}\n'.format(s, z))
<强>输出强>
In: 'DH_062_FAT_HSC_H1666_EFTO.FH1666.COMMON.D170801.T0433417'
Out: 'ABCD.R9999.COMMON.D170801.T0433417.txt'
In: 'DH_062_FAT_MMA_H0927_EFTO.FH0927.COMMON.D170801.T0433417'
Out: 'ABCD.R9999.COMMON.D170801.T0433417.txt'
In: 'ABCD.FH2237.COMMON.D170701.T1549353'
Out: 'ABCD.R9999.COMMON.D170701.T1549353.txt'
In: 'P.FH5526.COMMON.D130501.T1243225'
Out: 'ABCD.R9999.COMMON.D130501.T1243225.txt'
In: 'FS3389.COMMON.D160901.T1539489'
Out: 'ABCD.R9999.COMMON.D160901.T1539489.txt'
In: 'P.FH5587.COMMON.D150601.T1529158.7073202'
Out: 'ABCD.R9999.COMMON.D150601.T1529158.7073202.txt'
In: 'EFTO.FH3890.COMMON.D170401.T1332005'
Out: 'ABCD.R9999.COMMON.D170401.T1332005.txt'
In: 'H1737.COMMON.R201602.D160201.T1725587.txt'
Out: 'ABCD.R9999.COMMON.R201602.D160201.T1725587.txt'
In: 'EFTO.RH3864.MSPCOBMA.D170421.T1246176'
Out: 'EFTO.RH3864.MSPCOBMA.D170421.T1246176.txt'
In: 'P.FH2225.COMMON.D170101.T1737084.12016373.txt'
Out: 'ABCD.R9999.COMMON.D170101.T1737084.12016373.txt'
In: 'P.FH3204.COMMON.D170701.T1549353.txt_20170627_133012.txt'
Out: 'ABCD.R9999.COMMON.D170701.T1549353.txt_20170627_133012.txt'
In: 'P.RH2312.COMMON.D110301.T1539063.13313178.txt.gz'
Out: 'ABCD.R9999.COMMON.D110301.T1539063.13313178.txt.gz'
我将让您弄清楚如何处理映射到相同输出字符串的名称。
此处的版本仅保留了该名称的D
和T
部分。
pat = re.compile(r'(?:.*)\.COMMON\..*?(D\d*\.T\d*).*$')
for s in data:
z = pat.sub(r'ABCD.R9999.COMMON.\1.txt', s)
print(' In: {!r}\nOut: {!r}\n'.format(s, z))