Hi,

I would like to display the new lines of /var/log/messages that contain either IN_MyText or OUT_MyText (no matter where in the line)

I’ve tried

tail -fn 3 /var/log/messages | grep --color --line-buffered -e "(IN|OUT)_MyText"

But the output stay blank, when it should not…

Any ideas ?

  • thingsiplay@beehaw.org
    link
    fedilink
    arrow-up
    10
    ·
    2 months ago

    grep by default uses Basic Regular Expressions. This means the ( and ) lose their special meaning and are matched literally. Either use a backslash version \( to have a group, or use Extended Regular Expressions with -E "(IN|OUT)" . In man grep under REGULAR EXPRESSIONS are some differences noted.

  • CosmicGiraffe@lemmy.world
    link
    fedilink
    arrow-up
    4
    ·
    2 months ago

    It’s marked solved, but since OP didn’t post the solution:

    -e uses basic regular expressions, where you need to escape the meta-characters ((|)) with a backslash. Alternatively, use extended regex with -E

    $ echo a | grep -E "(a|b)"
    a
    $ echo a | grep -e "\(a\|b\)"
    a
    $ echo a | grep -e "(a|b)"
    $ echo a | grep -E "\(a\|b\)"
    
  • Onno (VK6FLAB)
    link
    fedilink
    arrow-up
    2
    ·
    2 months ago

    Do you get output if you use that exact tail command without the grep pipe?