単語全体を一致させようとすると、正規表現は失敗します。

単語全体を一致させようとすると、正規表現は失敗します。

これは私のテストファイル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以外の文字の;後に「が続きます。ser1user1#;

行がで始まると確信している場合は、user1単に次のものを使用できます。

grep -P '^user1 etc.'

または席がある場合、

grep -P '^ *user1 etc.'

おすすめ記事