Finding files containing text string in Linux is the easy task with the grep
utility. grep
also allows you to find files with specific text by searching directories recursively by defining -r
key. Here are a few examples:
grep -rnw '/path/to/somewhere/' -e 'pattern'
-r
or-R
is recursive,-n
is line number, and-w
stands for match the whole word.-l
(lower-case L) can be added to just give the file name of matching files.
Along with these, --exclude
, --include
, --exclude-dir
flags could be used for efficient searching:
- This will only search through those files which have .c or .h extensions:
12grep --include=\*.{c,h} -rnw '/path/to/somewhere/' -e "pattern" - This will exclude searching all the files ending with .o extension:
12grep --exclude=*.o -rnw '/path/to/somewhere/' -e "pattern" - For directories it’s possible to exclude a particular directory(ies) through
--exclude-dir
parameter. For example, this will exclude the dirs dir1/, dir2/ and all of them matching *.dst/:
12grep --exclude-dir={dir1,dir2,*.dst} -rnw '/path/to/somewhere/' -e "pattern"
How to find and replace a text string in files recursively
1 |
grep -rl oldtext . | xargs sed -i 's/oldtext/newtext/g' |
Good luck!