2011-10-12 27 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

相關問題