1

这是文件内容:

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

使用 Linux shell 脚本,我需要读取这个文件并且只将 9900(来自硬件:行)变成一个字符串,最好的方法是什么?谢谢!

4

1 回答 1

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 中执行此操作,但这需要更多的工作,而且可能不是单行的。

于 2013-10-22T20:57:36.617 回答