shell脚本:从文件中读取特定字符串

时间:2013-10-22 20:36:07

标签: shell sh

这是文件内容:

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

使用Linux shell脚本,我需要读取这个文件并只获得9900(从Hardware:line)到一个字符串,最好的方法是什么?谢谢!

1 个答案:

答案 0 :(得分:1)

鉴于您提供的信息范围,使用各种工具这是一项非常简单的任务。

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

Awk在表达式上查找匹配项,然后将该行分隔为由空格分隔的字段。 $1是第一个单词,$5是第五个单词。

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

sed命令还可以在与特定正则表达式匹配的行上执行命令。在这种情况下,对于“硬件”行,我们将每个非数字字符替换为null,这显然会留下数字。这按类型而不是按字段分隔。 (你没有说明你想要达到的目标。)

最后:

$ 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中执行此操作,但这样做会有很多工作,而且可能不是单行程序。