2015-08-28 437 views
1

我正嘗試執行下面的命令 - 但輸出已經引入了一些前導空格。使用wc -l命令時出現意外的前導空格

ls -lrt | wc -l 
    29 
echo $SHELL 
/bin/bash 

當我在不同的機器上運行相同的命令時,輸出如預期。

ls -lrt | wc -l 
183 
echo $SHELL 
/bin/bash 

前導空格引起我的Perl驗證失敗

unless ($phCountRet->{COUNT} =~ /^\d+$/){ 
... 
} 

我可以選擇修剪領先的空格,然後做了驗證,但它不會是一個乾淨的解決方案。

任何可能導致這種情況的指針都會很有幫助。

+0

相關:http://stackoverflow.com/questions/10238363/how-to-get-wc-l-to-print-just-the-number-of-lines-without-file-name是否其中之一機器運行AIX? – reinierpost

+0

爲什麼你認爲修整空白不乾淨? 'ls | wc -l | sed -e's/^ * //''看起來不像'ls -lrt |那麼幹淨wc -l',但你可以做相當於'perl -E'說長度glob'*「'',而不是根本不向外發送wc。 –

+0

當你使用多個文件名運行'wc'時,它將對齊並右對齊數字,以便它們更清晰(至少在某些實現中)。輸出意味着比機器可讀的人類可讀。你只需要考慮輸出中的空白變化。 –

回答

2

使用

unless ($phCountRet->{COUNT} =~ /^\s*\d+$/){ 

這也匹配的是數字與前面空白。

+0

謝謝Jens。是的,我完全可以修改正則表達式來適應這種情況。但是,我仍然更感興趣知道爲什麼要引入前導空格。 – Soumya

+0

@Soumya認爲更好的可讀性。但也認爲這個問題將成爲焦點話題。 – Jens

+0

這個答案簡單地重複回到OP來遵循OP所提出的建議,而不解決OP所做的問題。 –

0

正如我在WC on OSX - Return includes spaces指出,這是一個實現細節,這是不是在POSIX標準明確(因此它取決於實施者的偏好對準列—與否)。