2015-06-29 42 views
2

我想找到所有他們lsof的線條與「谷歌」的,所以我試過如下:在Mac終端中使用lsof和awk的奇怪行爲?

lsof | awk '/.*google.*/ { print $1 "," $2 "," $3} ' > new_file.csv 

其正常產生與開始與「google」一詞的行輸出。

但是,後來我嘗試這和CSV包含什麼:

lsof | awk '/\s*google.*/ { print $1 "," $2 "," $3} ' > new_file.csv 

但是,我認爲\s*指任何數量的空格。這種行爲是否有任何理由?謝謝。

回答

5

\s確實意味着空格,而\s*確實意味着零個或多個空格,但不包含在awk中。

awk使用不同的(舊的)正則表達式引擎。

對於awk,您希望[[:space:]]*匹配零個或多個空格。 (這是一個字符類類[:space:]在字符列表[]

,如果你只是關心google輸出是,那麼你只需要/google/雖這麼說。

如果你想要一個單詞掛鉤google那麼你想要/\<google\>/

正如Ed Morton所指出的,GNU Awk版本4.0+還增加了對\s元字符的支持。

+0

'\ s'確實表示GNU awk中的任何空格字符。 –

+0

不應該'/ \ /'是'/ \ /'? –

+0

@MarkReed是的,謝謝。 –