Yes, the example below would've worked... I think my problem was missing
double quotes screwing up the parsing of spaces. I actually don't have a
reason not to do it the simple way, however; it's just that I don't know
much about grep/bash. I think I'm going to use grep -lr, as it is giving
the output I wanted.
Thanks,
Martin
Bob Miller wrote:
Martin Kelly wrote:
I have just written a shell script that greps a directory for a certain
pattern and reports each file that contains the pattern along with the
filename before it (this is why I wrote it... if I just do a "ls | cat |
grep pattern" or something like that it will report the text that
matches but not the filename).
I am getting strange behavior in that it works, but sometimes it
randomly reports the contents of my / directory. This does not always
happen, only sometimes.
Have you already considered and rejected doing it the simple way?
$ cat misc/dirgrep
#!/bin/sh
cd "$1"
shift
grep "$@" *
$ misc/dirgrep code/c/kr/1/ MAXLINE
1-16.c:#define MAXLINE 1000 /* maximum input line size */
1-16.c:char line[MAXLINE]; /* current input line */
1-16.c:char longest[MAXLINE]; /* longest line saved here */
1-16.c:while ((len = getline(line, MAXLINE)) > 0)
1-17.c:#define MAXLINE 1000 char line[MAXLINE]; while ((len = getline(line,
MAXLINE)) > 0) {
Also note that "grep -r ..." will recursively search subdirectories.
That's useful sometimes. You could just say
$ grep -r MAXLINE code/c/kr/1/
If you have reason not to do it that way, you can fix your script by
not using backslashes (it runs the output lines together) and by
quoting $TEXT in the echo command.
You don't need to save and restore the current directory. Each
shell script runs in its own process, and each processs has its
own current directory. So when the script exits, the kernel
forgets its current directory.
This would work.
#!/bin/bash
cd "$1" # note quotes
for file in *
do
if grep -q "$2" "$file" # note quotes
then
echo
echo "$file:"
echo "-----------------------"
grep "$2" "$file"
fi
done
_______________________________________________
EUGLUG mailing list
euglug@euglug.org
http://www.euglug.org/mailman/listinfo/euglug