# string searching using grep in Linux ## 1. Basic Usage: The fundamental syntax of grep is: - `grep [options] pattern [file...]` Example: - `grep "error" logfile.txt` # This searches for the word "error" in logfile.txt. ## 2. Case Sensitivity: - By default, grep IS case-sensitive. - Use `-i` for case-insensitive search: - `grep -i "eRRor" logfile.txt` # This will return all occurances of "error" in any case sensitivity. Error, erRor, ERROR, etc... ## 3. Regular Expressions: grep supports regular expressions for powerful pattern matching. - . (dot): Matches any single character - *: Matches zero or more of the preceding character - ^: Matches the start of a line - $: Matches the end of a line - [ ]: Matches any single character in brackets Example: - `grep "^Error" logfile.txt` # Lines starting with "Error" - `grep "failed$" logfile.txt` # Lines ending with "failed" - `grep "t[ae]st" logfile.txt` # Matches "test" or "tast" ## 4. Extended Regular Expressions: Use -E option or egrep command for extended regex: - `grep -E "Error|Warning" logfile.txt` # Searches for "Error" or "Warning" in "logfile.txt" - `egrep "Error|Warning" logfile.txt` # Same as above ## 5. Inverting the Match: -v option inverts the match, showing lines that don't match: - `grep -v "success" logfile.txt` # Match any line that does not contain the work "success" in logfile.txt ## 6. Displaying Line Numbers: `-n` option shows line numbers: - `grep -n "error" logfile.txt` ## 7. Counting Matches: `-c` option counts the number of matching lines: - `grep -c "error" logfile.txt` ## 8. Showing Context: - `-A n`: Shows n lines after the match - `-B n`: Shows n lines before the match - `-C n`: Shows n lines before and after the match Example: - `grep -C 2 "critical error" logfile.txt` # Match "critical error" inside "logfile.txt" and show 2 lines above/below each occurance. ## 9. Recursive Search: `-r` option searches recursively through directories: - `grep -r "TODO" /path/to/project` ## 10. Matching Whole Words: `-w` option matches whole words only: - `grep -w "log" logfile.txt` ## 11. Displaying Filename: - `-H`: Always print filename - `-h`: Never print filename - `grep -H "error" *.log` ## 12. Quiet Mode: `-q` option suppresses output, useful in scripts: ``` if grep -q "error" logfile.txt; then echo "Errors found" fi ``` ## 13. Using grep with Pipes: grep works well with pipes for filtering output: - `ps aux | grep "nginx"` ## 14. Multiple Patterns: Use `-e` option for multiple patterns: - `grep -e "error" -e "warning" -e "critical" logfile.txt` ## 15. Reading Patterns from a File: `-f` option reads patterns from a file: `grep -f patterns.txt logfile.txt` ## 16. Binary Files: `-a` Process binary files as text - \-\-binary-files=without-match: Assume binary files don't match `grep -a "string" binary_file` ## 17. Colorizing Output: `--color` option highlights matches: - `grep --color "error" logfile.txt` ## 18. Excluding Files: `--exclude` option excludes files from the search: - `grep "TODO" --exclude="*.o" -r .` ## 19. Including Only Certain Files: `--include` option includes only specified files: - `grep "function" --include="*.c" -r .` ## 20. Null-Separated Output: `-Z` option outputs a zero byte after filename: - `grep -lZ "error" *.log | xargs -0 rm`