How many times I had to search for something, let’s say my mac address, to change it in all files under /etc ? I couldn’t remebmer, different distros – different files, anyway, that’s an example, there are many out there, like searching log files, strings like IPs or titles and the worst part, recursively. I will show few examples of Using grep to find string in files and recursively too.
You need to use the grep command. The grep command searches the given input files for lines containing a match or a text string.
The syntax is:
grep "text string to search” directory-path
OR
grep [option] "text string to search” directory-path
OR
grep -r "text string to search” directory-path
OR
grep -r -H "text string to search” directory-path
OR
egrep -R "word-1|word-2” directory-path
OR
egrep -w -R "word-1|word-2” directory-path
In this example, search for a string called ‘redeem reward’ in all text (*.txt) files located in /home/tom/ directory, use:$ grep "redeem reward" /home/tom/*.txt
OR$ grep "redeem reward" ~/*.txt
You can search for a text string all files under each directory, recursively with -r option:$ grep -r "redeem reward" /home/tom/
OR$ grep -R "redeem reward" /home/tom/
By default, the grep command prints the matching lines. You can pass -H option to print the filename for each match:$ grep -H -r "redeem reward" /home/tom
Sample outputs:
To just display the filename use the cut command as follows:$ grep -H -R vivek /etc/* | cut -d: -f1
Sample outputs:
The grep command shows output on a separate line, and it is preceded by the name of the file in which it was found in the case of multiple files. You can pass the -h option to suppress inclusion of the file names in the output:$ grep -h -R 'main()' ~/projects/*.c
You can select only those lines containing matches that form whole words using the -w option. In this example, search for word ‘getMyData()’ only in ~/projects/ dirctory:$ grep -w -R 'getMyData()' ~/projects/
Use the egrep command as follows:$ egrep -w -R 'word1|word2' ~/projects/
grep command generate error message as follows due to permission and other issues:
No such file or directory
No such device or address
Permission denied
To hide all errors or warning message spam generated by the grep command, append 2>/dev/null to grep command. This will send and hide unwanted output to /dev/null device:$ grep -w -R 'getMyData()' ~/projects/ 2>/dev/null
Pass the --color option to the grep command display matched text/words in color on the terminal:
Our final example ignore case distinctions in both the search PATTERN and the input files:grep -s -R 'word' /path/to/dir
grep -s -r 'income tax' ~/accounting/
or just
grep -sR ‘word’ /path/
Article Number: 683
Posted: Fri, May 15, 2020 12:18 PM
Last Updated: Fri, May 15, 2020 12:18 PM
Online URL: http://kb.ictbanking.net/article.php?id=683