Grep
嘗試匹配整個單詞時正則表達式失敗
這是我的測試文件 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.'