【发布时间】:2011-12-06 00:49:18
【问题描述】:
我的操作系统是 Ubuntu;我有一个包含文本文件的目录;每个文件都包含一个具有唯一 ID 的行
IDtag ID号
文本文件中的行位置是随机的,但是,很容易识别它是简单的正则表达式
^IDtag ID[0-9]*
如何根据 ID 重命名文件? IE。每个文件都必须获得一个新名称 IDnumber.txt 我可以运行 Linux shell 脚本或 Perl 脚本。
【问题讨论】:
我的操作系统是 Ubuntu;我有一个包含文本文件的目录;每个文件都包含一个具有唯一 ID 的行
IDtag ID号
文本文件中的行位置是随机的,但是,很容易识别它是简单的正则表达式
^IDtag ID[0-9]*
如何根据 ID 重命名文件? IE。每个文件都必须获得一个新名称 IDnumber.txt 我可以运行 Linux shell 脚本或 Perl 脚本。
【问题讨论】:
先试试这个
for i in a b c; do echo mv $i `egrep -m1 -e 'IDtag ID[0-9]*' $i | sed -e 's/IDtag ID//'`; done
如果mvs 是正确的 - 删除回显位
【讨论】:
egrep -m1 -e 'IDtag ID[0-9]*' $i | sed -e 's/IDtag ID//';完成后它会返回类似 mv a.txt echo放进去,你可以先检查一下。当然,您可以将 a b c 更改为 *.txt - 或您想要的任何 glob。
听起来像是功课。 但我会部分回答你的问题。 下面将给出重命名文件要执行的所有命令的列表。
grep ^IDtag * | awk '{split($1,a,":");print "mv",a[1], $2".txt"}'
ivory.192> grep ^IDtag * | awk '{split($1,a,":");print "mv",a[1], $2".txt"}'
mv 000001 000001.txt
mv temp2 000002.txt
ivory.193>
将其放入 for 循环并执行 shell 脚本中的每一行。
此外,您还可以将输出重定向到文件并授予文件执行权限并将其作为脚本执行。这将达到您的目的,此外,您还拥有重命名的文件列表。
【讨论】: