2013-10-22 284 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中做到这一点,但它会做很多工作,并且可能不是单行程。