2013-03-17 134 views
0

我試圖使用system_profiler命令從我的Mac上獲取並打印一些系統信息。我能夠得到的信息很好,但每個項目都有一個領先的空間和尾隨換行符(我認爲)。問題是後面的換行符(或其他什麼)。下面是我使用的命令之一的一個例子:使用awk刪除尾隨空格

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腳本)。

謝謝!

+0

嘗試:' system_profiler SPHardwareDataType | tr -dc'[:print:] \ n'| awk ...'刪除數據中的所有不可打印字符。 – 2013-03-17 20:55:01

+0

謝謝,但這並不適合我。我仍然有領先的空間和換行符。 – 2013-03-17 20:57:59

回答

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$ 
+1

太棒了!那很棒。我猜gsub _was_能夠正常工作,我只是在打印期間添加換行符!真的很高興知道。謝謝! – 2013-03-17 21:34:48

0

嘗試使用不同的字段分隔符擺脫前導空格的:

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