1. Explain how to use grep with regular expressions. Provide examples of common patterns for searching IP addresses, email addresses, and date formats.
Grep supports regular expressions for powerful pattern matching. Use grep -E (extended regex) or egrep for full regex support. Basic patterns include . (any character), * (zero or more), + (one or more), ? (zero or one), ^ (line start), $ (line end), [] (character class), and | (alternation). To search for IP addresses, use: grep -E '[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}' file.txt matches patterns like 192.168.1.1. For more accuracy: grep -E '^([0-9]{1,3}\.){3}[0-9]{1,3}$' ensures entire line is an IP. For email addresses: grep -E '[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}' finds email patterns. For dates in YYYY-MM-DD format: grep -E '[0-9]{4}-[0-9]{2}-[0-9]{2}' file.txt. For MM/DD/YYYY: grep -E '[0-9]{2}/[0-9]{2}/[0-9]{4}'. Use character classes like [[:digit:]] for portability: grep -E '[[:digit:]]{4}-[[:digit:]]{2}-[[:digit:]]{2}'. Advanced patterns: grep -E '^(https?://)?[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}' for URLs, grep -E '^[A-Z][a-z]+ [A-Z][a-z]+$' for full names. Use -P for Perl-compatible regex with lookaheads: grep -P '(?=.*[A-Z])(?=.*[0-9])' for lines with uppercase and digits. Mastering regex with grep enables complex log analysis and data extraction.