我的操作系統是Ubuntu;我有一個包含文本文件的目錄;每個文件包括具有唯一ID的線如何根據內容重命名文本文件?
IDTAG的ID號
的行位置是一個文本文件內隨機的,但是,它是容易識別它是簡單的regex
^IDTAG ID [0-9 ] *
如何根據ID重命名文件?即每個文件都必須獲取一個新名稱IDnumber.txt 我可以運行Linux shell腳本或Perl腳本。
我的操作系統是Ubuntu;我有一個包含文本文件的目錄;每個文件包括具有唯一ID的線如何根據內容重命名文本文件?
IDTAG的ID號
的行位置是一個文本文件內隨機的,但是,它是容易識別它是簡單的regex
^IDTAG ID [0-9 ] *
如何根據ID重命名文件?即每個文件都必須獲取一個新名稱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
如果mv
s爲正確的 - 去除回聲位
聽起來像是一門功課。 但我會部分回答你的問題。下面的 將給出要執行的所有命令的列表以重命名文件。
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腳本中的每一行。
另外有一個軌道,你可以重定向輸出到一個文件,並給予文件執行權限,並執行它作爲一個腳本。這將做你的目的另外,你也有重命名文件的列表。
謝謝Rahul!你的命令在我的電腦上工作,並且重定向輸出用於跟蹤的想法很有用。
爲了以防萬一,故事是 - 我收到了一些通過合併許多單個文件而創建的大文件,現在我想恢復它們。命令csplit幫助我恢復文件,而不是文件名。 –
Novice735
感謝Ed Heal!有用! – Novice735
這是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
我把'回聲',所以你可以先檢查。當然,您可以將b c更改爲* .txt - 或者您想要的任何glob。 –