If any of the filenames (or cmdline input) have spaces, you'll need to be
careful to handle that correctly...
you might want to incorporate xargs, but I am forgetting a specific hint for
this scenario
which is tucked away too deeply, sorry.

   Ben


On 12/31/06, Martin Kelly <[EMAIL PROTECTED]> 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.

Here's an example:
[EMAIL PROTECTED]:~$ misc/dirgrep code/c/kr/1/ MAXLINE

1-16.c:

--------------------------------------------------------------------------------
#define MAXLINE 1000 /backups /bin /boot /dev /etc /home /initrd
/initrd.img /lib /lost+found /media /mnt /opt /proc /root /sbin /srv
/sys /tmp /usr /var /vmlinuz maximum input line size */ char
line[MAXLINE]; /backups /bin /boot /dev /etc /home /initrd /initrd.img
/lib /lost+found /media /mnt /opt /proc /root /sbin /srv /sys /tmp /usr
/var /vmlinuz current input line */ char longest[MAXLINE]; /backups /bin
/boot /dev /etc /home /initrd /initrd.img /lib /lost+found /media /mnt
/opt /proc /root /sbin /srv /sys /tmp /usr /var /vmlinuz longest line
saved here */ while ((len = getline(line, MAXLINE)) > 0)

1-17.c:

--------------------------------------------------------------------------------
#define MAXLINE 1000 char line[MAXLINE]; while ((len = getline(line,
MAXLINE)) > 0) {

...


Here's the source for dirgrep:

#!/bin/bash

PWD=`pwd`
cd $1
for file in $(ls); do
    TEXT=`cat $file | grep $2`
    if [ $? -eq 0 ]; then
       echo
       echo "$file:"
       echo

"--------------------------------------------------------------------------------"
       echo $TEXT
    fi
done

cd $PWD


Thanks all,
Martin
_______________________________________________
EUGLUG mailing list
[email protected]
http://www.euglug.org/mailman/listinfo/euglug

_______________________________________________
EUGLUG mailing list
[email protected]
http://www.euglug.org/mailman/listinfo/euglug

Reply via email to