2011-10-12 28 views
0

我的操作系统是Ubuntu;我有一个包含文本文件的目录;每个文件包括具有唯一ID的线如何根据内容重命名文本文件?

IDTAG的ID号

的行位置是一个文本文件内随机的,但是,它是容易识别它是简单的regex

^IDTAG ID [0-9 ] *

如何根据ID重命名文件?即每个文件都必须获取一个新名称IDnumber.txt 我可以运行Linux shell脚本或Perl脚本。

回答

1

尝试这样做,第一

for i in a b c; do echo mv $i `egrep -m1 -e 'IDtag ID[0-9]*' $i | sed -e 's/IDtag ID//'`; done 

如果mv s为正确的 - 去除回声位

+0

感谢Ed Heal!有用! – Novice735

+0

这是Ed Heal命令的注释: for i in a.txt b.txt c.txt;做echo mv $ i'egrep -m1 -e'IDtag ID [0-9] *'$ i | sed -e's/IDtag ID //'';完成 它返回像 消息MV A.TXT MV b.txt MV A.TXT 如果 “回声” 删除,它重命名文件到它们的Id数字 – Novice735

+0

我把'回声',所以你可以先检查。当然,您可以将b c更改为* .txt - 或者您想要的任何glob。 –

0

听起来像是一门功课。 但我会部分回答你的问题。下面的 将给出要执行的所有命令的列表以重命名文件。

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脚本中的每一行。

另外有一个轨道,你可以重定向输出到一个文件,并给予文件执行权限,并执行它作为一个脚本。这将做你的目的另外,你也有重命名文件的列表。

+0

谢谢Rahul!你的命令在我的电脑上工作,并且重定向输出用于跟踪的想法很有用。
为了以防万一,故事是 - 我收到了一些通过合并许多单个文件而创建的大文件,现在我想恢复它们。命令csplit帮助我恢复文件,而不是文件名。 – Novice735

相关问题