我需要一個shell腳本來查找文件中的字符串,如下所示: FileName_1.00_r0102.tar.gz 然後從多次出現中選取最高值。如何編寫一個shell腳本來讀取目錄中的所有文件名並在文件名中查找特定的字符串?
我對「1.00」部分文件名感興趣。 我能夠在UNIX shell中使用的命令分別得到這個角色:
find /directory/*.tar.gz | cut -f2 -d'_' | cut -f1 -d'.'
1
2
3
1
find /directory/*.tar.gz | cut -f2 -d'_' | cut -f2 -d'.'
00
02
05
00
的問題是有這個字符串多個文件:
FileName_1.01_r0102.tar.gz
FileName_2.02_r0102.tar.gz
FileName_3.05_r0102.tar.gz
FileName_1.00_r0102.tar.gz
我需要挑選與FileName_(「最高值」)的文件_r0102.tar.gz
但因爲我是新來的shell腳本我無法弄清楚如何處理這些多個實例在腳本中。
,我想出了只爲整數部分是如下的腳本:
#!/bin/bash
for file in /directory/*
file_version = find /directory/*.tar.gz | cut -f2 -d'_' | cut -f1 -d'.'
done
OUTPUT: file_version:command not found
請幫助。 謝謝!
這不是一個答案,只是試圖找出語法錯誤,所以下次你可以避免它們:1)在for循環中需要'do':'for ....; do ....; done' 2)當你設置一個變量時,你不能在等號:'file_version = 5',* not *'file_version = 5' 3)設置一個變量來包含輸出一個命令,你需要[命令替換](https://www.gnu.org/software/bash/manual/html_node/Command-Substitution.html):'file_version = $(command)'4)不是語法錯誤,但引用變量賦值的RHS是個好主意:'file_version =「$(command)」'。 – Nick
上面的好建議,但不要讓我們的語法檢查你的腳本,學習使用http://shellcheck.net。你知道「頭部」和「尾巴」釐米。如果你可以強制你的輸出進行排序,這應該有所幫助。祝你好運。 – shellter
非常感謝,@尼克! – EmbeddedManiac