これは私のテストファイル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
その行に一致する正規表現を提供したいと思います。
何か提案してもらえますか?
ベストアンサー1
問題は、2つを明示的に達成しようとしていますが、2つがお互いを暗示していることです。
- この行は次に終了する必要があります。
user1
- 行はコメント記号(
#
または)で;
始まってはいけません。
#
ただし、2番目の正規表現では、「行はまたは文字以外で始まる必要があり、次のものを含める必要があり;
ますuser1
。したがって、grep
前に文字が続くと予想されます。user1
これは、「すべての文字」を要求する最初の正規表現では問題ではありません#
。以外の文字で始まるのと同様に、or以外の文字の;
後に「が続きます。ser1
user1
#
;
行がで始まると確信している場合は、user1
単に次のものを使用できます。
grep -P '^user1 etc.'
または席がある場合、
grep -P '^ *user1 etc.'