Tuesday, July 26, 2022

[SOLVED] Grep pattern with Multiple lines with AND operation

Issue

How can I determine a pattern exists over multiple lines with grep? below is a multiline pattern I need to check is present in the file

 Status:    True
 Type:   Master

I tried the below command but it checks multiple strings on a single line but fails for strings pattern match on multiple lines

  if cat file.txt  | grep -P '^(?=.*Status:.*True)(?=.*Type:.*Master)'; then echo "Present"; else echo "NOT FOUND"; fi

file.txt

Interface:                      vlan
Status:                         True
Type:                           Master
ID:                             104

Solution

Using gnu-grep you can do this:

grep -zoP '(?m)^\s*Status:\s+True\s+Type:\s+Master\s*' file

Status:                         True
Type:                           Master

Explanation:

  • P: Enabled PCRE regex mode
  • -z: Reads multiline input
  • -o: Prints only matched data
  • (?m) Enables MULTILINE mode so that we can use ^ before each line
  • ^: Start a line


Answered By - anubhava
Answer Checked By - Marilyn (WPSolving Volunteer)