我瞎搞一點點使用awk匹配,我還是一種新的抨擊/ AWK如此忍受我正則表達式使用awk
,當我這樣做是爲了尋找所有進程作爲root運行
ps aux | awk '$0 ~ /.*root*./ {print $0, $11}'
它打印出所有我想要的東西,但它也在底部打印出一行,其中包含MY用戶名(不是root)和過程awk。這是爲什麼?我能做些什麼呢?
注:我沒有替代解決方案很感興趣打印出所有具有根的過程。我已經可以做到這一點。我想了解這裏發生了什麼,以及我如何使用它。
我瞎搞一點點使用awk匹配,我還是一種新的抨擊/ AWK如此忍受我正則表達式使用awk
,當我這樣做是爲了尋找所有進程作爲root運行
ps aux | awk '$0 ~ /.*root*./ {print $0, $11}'
它打印出所有我想要的東西,但它也在底部打印出一行,其中包含MY用戶名(不是root)和過程awk。這是爲什麼?我能做些什麼呢?
注:我沒有替代解決方案很感興趣打印出所有具有根的過程。我已經可以做到這一點。我想了解這裏發生了什麼,以及我如何使用它。
似乎有幾個問題:一個是你有*。而不是。*在「根」之後。另一個是你正在搜索整個行,而不僅僅是包含用戶名的列。
$ 0表示整條線。 $ 1代表第一列。
更接近於你想會是
ps aux | awk '$1 ~ /.*root.*/ {print $0, $11}'
什麼,但你也可以只是做
ps aux | awk '$1=="root" {print $0, $11}'
的第一個字段完全匹配你寫
ps aux | awk '$1 == "root"' { print $0, $11 }'
,你也可以要求ps
來過濾你
ps -Uroot | awk ' { print $5 } '
如果您需要匹配只能由根擁有的過程(即記錄以字符串根)開始:
ps aux | awk '/^root/ { print $0, $11 }'
注意/regex/
和$0 ~ /regex/
是等價的。
,以避免從被打印AWK過程的方法是這樣的:
ps aux | awk '/[r]oot/ {print $0,$11}'
即劈像這樣工作:AWK將被搜索的字符「R」「O」「O」「T的序列」。實際的awk過程不匹配,因爲ps輸出包含字符序列'[''r'']''o''o''t'。
很有意思。我現在知道了。爲什麼要搜索整條線?有沒有辦法只搜索一列? – Rell3oT
添加更多細節 –