我正在 Linux 中尋找正則運算式來過濾行程。我的要求是構建一個正則運算式來過濾具有以下 3 個條件的行程:
- 查找具有給定用戶名的行程
- 查找特定單詞匹配的行程
- 忽略特定單詞匹配的行程
假設我的服務器上運行了以下 4 個行程:
user1 2683 1 0 Dec03 ? 00:06:28 java -Xms2g -Xmx48g -DlogDir=. -DuploadDir=. -jar webapp-runner-8.0.33.4.jar -AconnectionTimeout=3600000 --port 8080 app1.war
user2 26568 1 1 06:32 pts/3 00:00:32 java -Xms2g -Xmx12g -DlogDir=. -DuploadDir=. -jar webapp-runner-9.0.31.0.jar -AconnectionTimeout=3600000 --port 9010 app2.war
user3 89568 1 1 06:32 pts/3 00:00:28 java -Xms2g -Xmx12g -DlogDir=. -DuploadDir=. -jar webapp-runner-9.0.31.0.jar -AconnectionTimeout=3600000 --port 9020 app3.war
user2 12657 1 22 Nov21 ? 1-05:51:45 java -Xmx1g -jar entrypoint.jar MS_ENV=dev MS_NAME=dev-cron MS_ID= MS_CLASS=com.test.cron.Cron
現在從上面的程序說,我想用用戶名user2和過濾行程user3,獲取單詞java匹配的行程并忽略單詞cron匹配的行程。
正則運算式的輸出應該是:
user2 26568 1 1 06:32 pts/3 00:00:32 java -Xms2g -Xmx12g -DlogDir=. -DuploadDir=. -jar webapp-runner-9.0.31.0.jar -AconnectionTimeout=3600000 --port 9010 app2.war
user3 89568 1 1 06:32 pts/3 00:00:28 java -Xms2g -Xmx12g -DlogDir=. -DuploadDir=. -jar webapp-runner-9.0.31.0.jar -AconnectionTimeout=3600000 --port 9020 app3.war
有人可以幫我解決這個問題嗎?
uj5u.com熱心網友回復:
使用它可能更容易pgrep:
pgrep -u user2,user3 -f java
將它輸送到您想生成的任何行程串列:
pgrep -u user2,user3 -f java | xargs ps wu
uj5u.com熱心網友回復:
試試這個:
ps -ef | grep -E 'user2|user3' | grep 'java' | grep -v 'cron'
uj5u.com熱心網友回復:
您可以通過匹配正則運算式來做到這一點
^(?=.*\b(?:user1|user2)\b)(?=.*\d{2}:\d{2}:\d{2} java\b)(?!.*\bcron\b).*$
設定了通用、不區分大小寫和多行標志。
演示
這個運算式可以分解如下(和/或將游標懸停在鏈接處運算式的每個元素上以獲得對其功能的解釋)。
^ # match beginning of a line
(?= # begin a positive lookahead
.*\b # match >= 0 characters then a word boundary
(?:user1|user2) # match 'user1' or 'user2'
\b # match a word boundary
) # end positive lookahead
(?= # begin a positive lookahead
.* # match >= 0 characters
\d{2}:\d{2}:\d{2} # match a time stamp then > 0 spaces
java\b # match 'java' followed by a word boundary
) # end positive lookahead
(?! # begin a negative lookahead
.* # match >= 0 characters
\bcron\b # match 'cron' with word boundaries
) # end negative lookahead
.*$ # match a line
請注意,環視不會從字串的開頭推進正則運算式引擎的字串指標。
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/390151.html
