{"id":244,"date":"2026-10-13T02:10:53","date_gmt":"2026-10-13T02:10:53","guid":{"rendered":"http:\/\/www.scmgalaxy.com\/tutorials\/2010\/04\/16\/unix-command-grep\/"},"modified":"2026-10-13T02:10:54","modified_gmt":"2026-10-13T02:10:54","slug":"unix-command-grep","status":"publish","type":"post","link":"https:\/\/www.devopsschool.com\/blog\/unix-command-grep\/","title":{"rendered":"Unix grep Quick Reference: Patterns, Options, and Real Command Examples"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\"><strong>grep<\/strong> is the standard Unix text-search command for finding lines that match a pattern in one or more files. This guide helps DevOps engineers, sysadmins, and shell users quickly choose the right grep options and write safer, more predictable search commands.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><em>Originally published on 2010-04-16; fully revised and updated.<\/em><\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.devopsschool.com\/blog\/wp-content\/uploads\/2010\/04\/unix-command-grep.png\" alt=\"unix-command-grep\" width=\"600\" height=\"400\" \/><\/p>\n\n\n\n<h2 class=\"wp-block-heading\">grep syntax at a glance<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">The base form is pattern-first, then one or more files. If no file is provided, grep reads from standard input.<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-1\" data-shcb-language-name=\"PHP\" data-shcb-language-slug=\"php\"><span><code class=\"hljs language-php language-bash\">grep &#91;options] <span class=\"hljs-string\">'pattern'<\/span> file1 &#91;file2 ...]\n\n<span class=\"hljs-comment\"># stdin example<\/span>\njournalctl -u sshd | grep -i <span class=\"hljs-string\">'failed'<\/span><\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-1\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">PHP<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">php<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<h2 class=\"wp-block-heading\">Most useful grep options (quick comparison)<\/h2>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>Option<\/th><th>What it does<\/th><th>Example<\/th><\/tr><\/thead><tbody><tr><td>-i<\/td><td>Ignore case during matching<\/td><td>grep -i &#8216;agarwal&#8217; emp.lst<\/td><\/tr><tr><td>-v<\/td><td>Invert match (show lines that do not match)<\/td><td>grep -v &#8216;director&#8217; emp.lst<\/td><\/tr><tr><td>-n<\/td><td>Show line numbers with matched lines<\/td><td>grep -n &#8216;marketing&#8217; emp.lst<\/td><\/tr><tr><td>-c<\/td><td>Count matching lines (not total match occurrences)<\/td><td>grep -c &#8216;director&#8217; emp.lst<\/td><\/tr><tr><td>-l<\/td><td>List only filenames that contain at least one match<\/td><td>grep -l &#8216;manager&#8217; *.lst<\/td><\/tr><tr><td>-e<\/td><td>Add multiple patterns on the command line<\/td><td>grep -e &#8216;Agarwal&#8217; -e &#8216;aggarwal&#8217; emp.lst<\/td><\/tr><tr><td>-f<\/td><td>Read patterns from a file (one pattern per line)<\/td><td>grep -f pattern.lst emp.lst<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">How grep evaluates a search request<\/h2>\n\n\n\n<pre class=\"mermaid\">\nflowchart TD\n    A[Choose input files or stdin] --> B[Choose pattern source]\n    B --> C[Inline pattern]\n    B --> D[Pattern file with -f]\n    C --> E[Apply options like -i -v -n]\n    D --> E\n    E --> F{Any matching lines}\n    F -- yes --> G[Print selected output]\n    F -- no --> H[Return nonzero status]\n<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">This flow is useful in scripts: grep output gives you the matching lines, and grep exit status can drive conditional logic.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Practical command examples<\/h2>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-2\" data-shcb-language-name=\"PHP\" data-shcb-language-slug=\"php\"><span><code class=\"hljs language-php language-bash\"><span class=\"hljs-comment\"># Basic single-file search<\/span>\ngrep <span class=\"hljs-string\">'sales'<\/span> emp.lst\n\n<span class=\"hljs-comment\"># Search across multiple files<\/span>\ngrep <span class=\"hljs-string\">'director'<\/span> emp1.lst emp2.lst\n\n<span class=\"hljs-comment\"># Phrase search (quoted pattern)<\/span>\ngrep <span class=\"hljs-string\">'jai sharma'<\/span> emp.lst\n\n<span class=\"hljs-comment\"># Variable expansion inside double quotes<\/span>\ngrep <span class=\"hljs-string\">\"jai Sharma $var\"<\/span> emp.lst\n\n<span class=\"hljs-comment\"># Ignore case<\/span>\ngrep -i <span class=\"hljs-string\">'agarwal'<\/span> emp.lst\n\n<span class=\"hljs-comment\"># Exclude matching lines and write remaining lines to a new file<\/span>\ngrep -v <span class=\"hljs-string\">'director'<\/span> emp.lst &gt; other.<span class=\"hljs-keyword\">list<\/span>\n\n<span class=\"hljs-comment\"># Show line numbers<\/span>\ngrep -n <span class=\"hljs-string\">'marketing'<\/span> emp.lst\n\n<span class=\"hljs-comment\"># Count matching lines<\/span>\ngrep -c <span class=\"hljs-string\">'director'<\/span> emp.lst\n\n<span class=\"hljs-comment\"># Show only filenames with matches<\/span>\ngrep -l <span class=\"hljs-string\">'manager'<\/span> *.lst<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-2\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">PHP<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">php<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-3\" data-shcb-language-name=\"PHP\" data-shcb-language-slug=\"php\"><span><code class=\"hljs language-php language-bash\"><span class=\"hljs-comment\"># Multiple patterns from CLI<\/span>\ngrep -e <span class=\"hljs-string\">'Agarwal'<\/span> -e <span class=\"hljs-string\">'aggarwal'<\/span> -e <span class=\"hljs-string\">'agarwal'<\/span> emp.lst\n\n<span class=\"hljs-comment\"># Patterns from a file (one per line)<\/span>\ngrep -f pattern.lst emp.lst<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-3\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">PHP<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">php<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<h2 class=\"wp-block-heading\">Common pitfalls and best practices<\/h2>\n\n\n\n<ul class=\"wp-block-list\"><li>Quote patterns that contain spaces or shell-special characters.<\/li><li>Use <strong>-i<\/strong> when case is uncertain instead of manually duplicating case variants.<\/li><li>Remember: <strong>-c<\/strong> counts matching <em>lines<\/em>, not every repeated occurrence on a line.<\/li><li>Use <strong>-f<\/strong> for long pattern lists; it is cleaner and easier to review than many <strong>-e<\/strong> flags.<\/li><li>When redirecting output, use a clear filename (for example, <em>other.list<\/em>) to avoid shell parsing issues with unquoted spaces.<\/li><\/ul>\n","protected":false},"excerpt":{"rendered":"<p>grep is the core Unix command for searching text by pattern across files or standard input. This revised quick reference covers syntax, high-value options, and practical examples you can use immediately.<\/p>\n","protected":false},"author":1,"featured_media":4369,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_joinchat":[],"footnotes":""},"categories":[4957],"tags":[4126,333,475,4124,4128,4129,4131,4130,4121,4123,169,4125,4127,4122],"class_list":["post-244","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-linux","tag-basic-grep-commands","tag-command","tag-grep","tag-grep-command-line-options","tag-grep-unix-command-guide","tag-grep-unix-command-introduction","tag-grep-unix-command-overview","tag-grep-unix-command-quick-reference","tag-grep-unix-commands-with-examples","tag-how-to-use-grep","tag-unix","tag-unix-command-grep-examples","tag-unix-grep-command-match-pattern","tag-unix-grep-command-options"],"_links":{"self":[{"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/posts\/244","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/comments?post=244"}],"version-history":[{"count":4,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/posts\/244\/revisions"}],"predecessor-version":[{"id":79074,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/posts\/244\/revisions\/79074"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/media\/4369"}],"wp:attachment":[{"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/media?parent=244"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/categories?post=244"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/tags?post=244"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}