这是文件内容:
CPU revision : 0
Hardware : nomen TOS 9900 (Flattened Device Tree)
Revision : nomen TOS 8800 (Flattened Device Tree)
Serial : 0000
使用Linux shell脚本,我需要读取这个文件并只获得9900(从Hardware:line)到一个字符串,最好的方法是什么?谢谢!
答案 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中执行此操作,但这样做会有很多工作,而且可能不是单行程序。