Grep

嘗試匹配整個單詞時正則表達式失敗

  • October 6, 2020

這是我的測試文件 test.txt

hello

user1 ALL=(ALL) NOPASSWD: /usr/bin/* /app/tomcat/tomcat*/webapps/*, /usr/bin/rm -rf /app/tomcat/tomcat*/webapps/*,/bin/rm -rf /app/tomcat/tomcat*/webapps/**.sh , /bin/kill -3 *

我能夠使用下面的正則表達式成功找到所需的行

grep -P '(^[^#;]ser1.*ALL=\(ALL\) NOPASSWD.*\/app\/tomcat.*$)' test.txt

但是,當我給出完整的單詞user1而不是ser1正則表達式時不匹配

低於原因的正則表達式失敗;它不匹配:

grep -P '(^[^#;]user1.*ALL=\(ALL\) NOPASSWD.*\/app\/tomcat.*$)' test.txt

我想user1在正則表達式中提供以匹配該行。

你能建議嗎?

問題是你試圖明確地實現兩件事,但它們相互暗示:

  • 該行應以user1
  • 該行不應以註釋符號(#;)開頭

但是,您的第二個正則表達式聲明“該行應以任何不是#or的字元開頭,;然後包含is not or後跟",就像以 not or字元開頭一樣。user1``grep``user1``#``;``ser1``user1``#``;

如果您確定該行以 開頭user1,則可以簡單地使用

grep -P '^user1 etc.'

或者,如果可能有空格,

grep -P '^ *user1 etc.'

引用自:https://unix.stackexchange.com/questions/613132