使用awk删除尾随空格

时间:2013-03-17 20:48:54

标签: macos awk newline whitespace trim

我正在尝试使用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脚本没有任何了解。)

谢谢!

2 个答案:

答案 0 :(得分:0)

print添加换行符。

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

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

  

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

为了演示此类内容,我使用cat -vet viz

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

答案 1 :(得分:0)

尝试使用其他字段分隔符来删除前导空格:

system_profiler SPHardwareDataType | awk -F': ' '/Processor Speed/{print $2}'