

Get the first matched files from grep command and get all the files don't contain some word, but input files for second grep comes from result files of first grep command. Grep -RH "cats" /home/adam/Desktop/TomAndJerry #absolute directoryĪ short introduction to symbolic links, for anyone reading this answer and confused by my reference to them:

If you want to find all mentions of the word cat in the directory /home/adam/Desktop/TomAndJerryĪnd you're currently in the directory /home/adam/Desktop/WorldDominationPlotĪnd you want to capture the filename but not the line number of any instance of the string "cats", and you want the recursion to follow symbolic links if it finds them, you could run either of the following grep -RH "cats". So if you want to find all files containing Darth Vader in the current directory or any subdirectories and capture the filename and line number, but do not want the recursion to follow symbolic links, the command would be grep -rnH "Darth Vader". Since you're trying to grep recursively, the following options may also be useful to you: -H: outputs the filename with the line If you want to follow symbolic links as well as actual directories (be careful of infinite recursion), grep -R "thing to be found" directory This is also known as the grep show file name option. If you only want to follow actual directories, and not symbolic links, grep -r "thingToBeFound" directory When you use the grep command with the -r option to search for a pattern recursively in a directory, you can add the -H option to display the file name along with the matched lines. Vendor/klaussilveira/gitter/lib/Gitter/Client.php:176: return $this->hidden Vendor/klaussilveira/gitter/lib/Gitter/Client.php:170: * Get hidden repository list Vendor/klaussilveira/gitter/lib/Gitter/Client.php:20: protected $hidden Tests/InterfaceTest.php:32: $options = array(self::$tmpdir. Src/GitList/Provider/GitServiceProvider.php:21: $options = $app Src/GitList/Application.php:43: 'git.hidden' => $config->get('git', 'hidden') ? $config->get('git', 'hidden') : array(), I can get: /home/vonc/gitpoc/passenger/gitlist/github #grep -include="*.php" -nRHI "hidden" *

This is equivalent to the -binary-files=without-match option.Īnd I can add ' i' ( -nRHIi), if I want case-insensitive results. Process a binary file as if it did not contain matching data Read all files under each directory, recursively this is equivalent to the -d recurse option. (Note: phuclv adds in the comments that -n decreases performance a lot so, so you might want to skip that option) -R, -r, -recursive Prefix each line of output with the line number within its input file. Recurse in directories only searching file matching PATTERN. That includes the following options: -include=PATTERN (As noted by kronen in the comments, you can add 2>/dev/null to void permission denied outputs)
#GREP SHOW FILENAME AND LINE WINDOWS#
I would also suggest that you postfix the regexp with $ in order to anchor it to the end (thus ensuring that the regexp matches filenames that ends with ".txt"): ls /some/path/some/dir/ | grep 'some_mask_.*\.I now always use (even on Windows with GoW - Gnu on Windows): grep -include="*.xxx" -nRHI "my Text to grep" * needs to be prefixed with a backslash since it has special significance as a regexp that matches a single character. Putting this together your command line version should be: ls /some/path/some/dir/ | grep 'some_mask_.*\.txt' | wc -lĪnd the script: iFiles=`ls /some/path/some/dir/ | grep 'some_mask_.*\.txt' | wc -l` In addition you need to write the pattern as a regexp and not as a wildcard match (which bash uses for matching). If you want to ensure that the pattern is used by grep then you need to enclose it in single quotes. The problem here is that grep some_mask_*.txt is expanded by the shell and not by grep, so most likely you have a file in the directory where grep is executed which matches some_mask_*.txtand that filename is then used by grep as a filter.
