![]() |
Hello and Welcome from United States to the UNIX and Linux Forums! Thank You for Visiting and Joining Our Global Community.
|
|
google unix.com
|
|||||||
| Forums | Register | Forum Rules | Links | Albums | FAQ | Members List | Calendar | Search | Today's Posts | Mark Forums Read |
| UNIX for Dummies Questions & Answers If you're not sure where to post a UNIX or Linux question, post it here. All UNIX and Linux newbies welcome !! |
More UNIX and Linux Forum Topics You Might Find Helpful
|
||||
| Thread | Thread Starter | Forum | Replies | Last Post |
| Recursive FTP -- here at last. | Perderabo | Shell Programming and Scripting | 52 | 03-25-2009 12:15 PM |
| recursive grep issue | Mace | UNIX for Dummies Questions & Answers | 1 | 08-11-2006 07:39 AM |
| recursive GREP ? | alan | UNIX for Dummies Questions & Answers | 3 | 08-22-2003 03:15 AM |
| grep recursive directories | jagannatha | UNIX for Dummies Questions & Answers | 8 | 07-24-2003 04:00 PM |
| Recursive FTP | aslamg | UNIX for Dummies Questions & Answers | 1 | 03-08-2001 04:27 AM |
![]() |
|
|
LinkBack | Thread Tools | Search this Thread | Rate Thread | Display Modes |
|
||||
|
Recursive grep
Hello,
First time post - I have no formal unix training and could use some help with this. I have a list of strings in File1 that I want to use to do a recursive search (grep) under a specific directory. Here is an example of the string I need to search: /directory/dire ctory/directory/dire ctory/filename I'm trying to illustrate that the string is a full directory path of a file where some of the directories have spaces in their names. I then have the following script: for h in `cat file1`; do grep -rl "$h" /../../../../../ >> /../../file2 ; done So, I'm trying to say for each string in file1, do a recursive grep in the specified directory and print the results to file2. The problem (I think) I'm running into is the format of the string I'm searching, the cat I'm doing is treating the spaces as escapes which throws the grep off. I've tried putting the string in single and double quotes but it's still not working. Sorry for the lack of technical terminology - I hope I was clear enough. If anyone can offer any help on making it work with what I have or a simpler alternative to what I have, it would be a great help. Thanks - upstate boy |
|
||||
|
Code:
find /path/to/search/in -type f | \
while read filename
do
grep -f /path/to/strings.txt $filename
done > /home/upstate_boy/results.txt
The done > filename part writes the output of the loop to filename Last edited by jim mcnamara; 05-16-2008 at 09:07 AM.. |
|
||||
|
The relative path to file2 seems wrong; the output redirection is relative to the current directory, not the directory of the file you are grepping.
The relative pat you are grepping seems wrong too; /../ is equivalent to / is equivalent to /../../../../../ The backticks in the for loop are what are splitting up stuff on whitespace. Use a construct which is less sensitive to spacing issues, or use proper quoting. Code:
for h in "`cat file1`"; do grep -rl "$h" pathtodir >>file2; done Code:
while read h; do grep -rl "$h" pathtodir >>file2; done<file1 |
|
||||
|
Thank you both for the replies. I don't think I'm executing your suggestions correctly, I've tried all 3.
Jim, I'm definately confused by which files go where when I read yours. assume: strings.txt = file with strings I want find results.txt = output file of search results I am trying: find /directory/I/want to/search/ -type f | \ while read results.txt do grep -f strings.txt $results.txt done When I use this, I get: read: `results.txt': not a valid identifier era, I didn't get any errors with your suggestions but strings I'm searching are still being broken up, meaning the spaces or '/' in the strings are being handled as breaks turning 1 string into several small strings that are each getting searched. A better example of what I was originally trying to do is: for h in `cat strings.txt`; do grep -rl "$h" /directory/path/I want/to/search/ >> /home/directory/results.txt ; done using /../../ in my original post was not the best choice on my part when they are the equivalent of back ticks. I'm going to continue to fiddle with all the suggestions, if any further guidance can be offered it would be a great help. Thanks upstate boy |
|
||||
|
The variable in Jim's example can't be named results.txt; just change it to e.g. "file" and you should be fine.
Anything with significant spaces in it should be double-quoted. |
|
||||
|
I've changed it to:
find /directory/I/want to/search/ -type f | \ while read file do grep -f strings.txt $results.txt done Results now are: grep: .txt: No such file or directory Can someone spell out exactly how I should have it based on the example I've been using? Thanks upstate boy |
|
||||
|
See edit above, in red.
|
| Sponsored Links | ||
|
|
![]() |
| Bookmarks |
| Tags |
| grep, grep recursive, recursive grep |
| Thread Tools | Search this Thread |
| Display Modes | Rate This Thread |
|
|