0

我正在尝试使用system_profiler命令从我的 Mac 上获取并打印一些系统信息。我能够很好地获取信息,但是对于每个项目,都有一个前导空格和尾随换行符(我认为)。问题是尾随换行符(或那里的任何东西)。这是我正在使用的命令之一的示例:

system_profiler SPHardwareDataType | awk -F: '/Processor Speed/ {gsub(/^[ \t]+|[ \n]+$/, "", $2); print $2}'

结果如下:

2.5 GHz

它没有出现在这里,但最后有某种字符会导致换行符。我上面的 gsub 正确地删除了结果开头的空格,但我已经尝试了我能想到的一切来删除换行符,但没有任何效果。

要查看正在运行的换行符,请system_profiler > output从终端运行并在您喜欢的文本编辑器中打开输出文件并显示不可见字符。

我最终试图用我获取的这些信息做的是使用TextExpander片段打印我的基本计算机信息。我已经正确设置并运行了所有片段,但是如上所述,我遇到了换行符的问题。

这是当前的输出:

Model:  MacBookPro9,2

OS Version: Mac OS X
 10.8.3
 (12D78
)
Processor:  2.5 GHz
  Intel Core i5

Graphics:  Intel HD Graphics 4000
  512 MB

Storage:  APPLE SSD SM128E Media

Memory:  8 GB

这就是我想要的样子:

Model: MacBookPro9,2
OS Version: Mac OS X 10.8.3 (12D78)
Processor: 2.5 GHz Intel Core i5
Graphics: Intel HD Graphics 4000 512 MB
Storage: APPLE SSD SM128E
Memory: 8 GB

TextExpander 允许您运行任何 shell 脚本,因此如果有任何其他方式可以获得我想要的功能,我会很乐意使用它。(即我已经进行了一些搜索,并且我已经看到了sed其中提到的内容,但我真的对 shell 脚本一无所知)。

谢谢!

4

2 回答 2

0

print添加一个换行符。

printf相反,如果您不想要换行符,请使用:

system_profiler SPHardwareDataType | awk -F: '/Processor Speed/ {
    gsub(/^[ \t]+|[ \n]+$/, "", $2)
    printf "%s", $2
}'

它没有出现在这里,但最后有某种字符会导致换行符。

为了演示这样的事情,我使用cat -vet

% system_profiler SPHardwareDataType | awk -F: '/Processor Speed/ {gsub(/^[ \t]+|[ \n]+$/, "", $2); print $2}' | cat -vet
2.13 GHz$
于 2013-03-17T21:14:53.440 回答
0

尝试使用不同的字段分隔符来消除前导空格:

system_profiler SPHardwareDataType | awk -F': ' '/Processor Speed/{print $2}'
于 2013-03-17T21:16:15.853 回答