这是文件内容:
CPU revision : 0
Hardware : nomen TOS 9900 (Flattened Device Tree)
Revision : nomen TOS 8800 (Flattened Device Tree)
Serial : 0000
使用 Linux shell 脚本,我需要读取这个文件并且只将 9900(来自硬件:行)变成一个字符串,最好的方法是什么?谢谢!
鉴于您提供的信息的范围,使用各种工具来完成这项任务非常容易。
$ 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 中执行此操作,但这需要更多的工作,而且可能不是单行的。