2017-07-25 91 views
2

我正在寫需要找到一個文件與QNX和POSIX兼容的Linux兼容發現在QNX的精確匹配,而無需使用grep的-w

更詳細的精確匹配的腳本:

我試着去找到一個過程的用戶,這樣的原始命令我寫的是

user=$(ps -aux | awk '{print $1 " " $2}' | grep -w ${process} | awk '{}print $1') 

這POSIX作品完美兼容Linux的

然而,QNX是不完全POSI X兼容和grep -w是不適用於我的目標...所以我需要找到一個完全匹配沒有grep -w

+0

相信awk'的'一個調用可以做任何你希望實現用'awk的... | grep ... | awk ......這幾乎總是一個糟糕的結構。請顯示'ps'的示例輸出並解釋哪些部分需要匹配什麼。如果你的3'qnx'標籤有'awk',請考慮替換一個。 –

+0

所以我的目標是讓進程的用戶被賦予進程ID,所以我必須從ps -aux命令中刪除所有的垃圾值,這是第一個awk的用途(我的awk僅用於ID和用戶名,刪除所有其他數字,可以搞砸下面的grep -w)然後grep -w ID(我需要exacts,因爲你可以有一個11和1112的普通grep將拉兩個)然後我awk只有用戶名這是保存到變量中......也感謝標籤上的提示 –

+0

是的,使用單個'awk'與單詞分隔符,如'awk'/ \ /{做某事}' –

回答

1

我想你想打印場1場,如果2完全一致的東西:

ps -aux | awk -v p=$process '$2==p{print $1}' 
0

-w不是一個有效的POSIX選項的grep,不應該使用該應用程序是應該可以在POSIX系統之間移植。總是可以ps -p $ 1 -o user =?在用戶可能與進程ID相同的情況下,你將如何處理grep和awk?

+0

謝謝我誠懇地認爲-w是posix,因爲它是grep ...還計劃沒有用戶是像字符串的數字字符串,所以我忽略了它的可能性...但我只是想把如果發生這種情況,將會彈出一個警告(這只是由工程師使用,以便他們可以在發生時處理邊緣案例) –