2013-10-22 201 views
1

一個特定的字符串這裏是文件內容:shell腳本:從文件中讀取

CPU revision : 0 
Hardware  : nomen TOS 9900 (Flattened Device Tree) 
Revision  : nomen TOS 8800 (Flattened Device Tree) 
Serial   : 0000 

使用Linux shell腳本,我需要讀取這個文件,並只得到9900(從硬件:線)到一個字符串,什麼是最好的方法?謝謝!

+0

你試過了什麼?向我們展示您的工作,我們將幫助您修復錯誤。在您的示例輸入中,「硬件」行的其他可能值是什麼?* – ghoti

回答

1

鑑於您提供的信息的範圍,使用各種工具這是一項非常簡單的任務。

$ awk '$1=="Hardware"{print $5}' sample.txt 

awk在表達式上查找匹配項,然後將該行分隔到由空白分隔的字段中。 $1是第一個單詞,$5是第五個「單詞」。

$ sed -ne '/^Hardware/s/[^0-9]//gp' sample.txt 

sed命令還可以在與特定正則表達式匹配的行上執行命令。在這種情況下,對於「硬件」行,我們用空來替換每個非數字字符,這顯然留下了數字。這按類型而不是字段分開。 (你沒有說明是你所想要的目的。)

最後:

$ readarray -t stuff < sample.txt 
$ for line in "${stuff[@]}"; do this=($line); test "${this[0]}" = "Hardware" && echo "${this[4]}"; done 

無需使用任何外部工具,這個發現單獨使用bash行。請注意,這種數組引用在舊版Bourne風格的shell中不起作用。但如果你在Linux或OSX中,你的shell可能默認爲bash。

如果你想知道"${this[4]}",那麼「4」是因爲bash數組從零開始編號,而awk行是從$1開始的分詞。

我們也可以在非bash shell中做到這一點,但它會做很多工作,並且可能不是單行程。