grep

syntax

  • grep [OPTIONS] PATTERN [FILE…]
    grep [OPTIONS] [-e PATTERN | -f FILE] [FILE…]

    • -A get the above line with match lines
    • -B get the below line with match lines
    • -c count the lines
    • -E regular expression
    • -i ignore case
    • –include=”*.c” only search c files
    • -l file with matches
    • -L file without matches
    • -n line number
    • -r recursive
    • -w match whole word
    • -v invert match
  • regular expression

    • [1-4] match digits from 1 to 4
    • [^1-4] exclude 1 to 4
    • abc|123 contain abc or 123
  • POSIX:

    • [:alpha:] Any alphabetical character, regardless of case
    • [:digit:] Any numerical character
    • [:alnum:] Any alphabetical or numerical character
    • [:blank:] Space or tab characters
    • [:xdigit:] Hexadecimal characters; any number or A–F or a–f
    • [:punct:] Any punctuation symbol
    • [:print:] Any printable character (not control characters)
    • [:space:] Any whitespace character
    • [:graph:] Exclude whitespace characters
    • [:upper:] Any uppercase letter
    • [:lower:] Any lowercase letter
    • [:cntrl:] Control characters

skills

  • count the selected lines, we can do as: dmesg |grep -i error |wc -l, or like
    this dmesg |grep -i error -c

  • search by match whole word dmesg |grep -w 'error'

  • grep -rl --include="*.c" MSG_QUEUE ./

  • select only the lines containing six, seven or eight several times.
    grep -E "(six|seven|eight).*\1" test.txt

  • search contain TAB key, using [CTRL+V][TAB] grep " 504 " test.txt

  • grep -r "abc" /root/source
    grep -r --include "*.h" "date" path
    grep -m 1 "model name" /proc/cpuinfo only display the first match line
    grep -i -E "abc|123" match abc or 123, -i ignore, -E extended regular expression.
    grep -r -l "main" . search all files under each directory, -l files-with-match, -L files-withou-match
    grep -w "linux" *.md match word
    grep -rl --include=*.{h,cpp} "socket" . search socket only with .h .cpp files
    grep --exclude-dir="_posts" --exclude-dir="_site" -r "Dennis" ./ exclude specify directory

Reference