From owner-freebsd-questions@FreeBSD.ORG Wed Mar 23 18:43:02 2005 Return-Path: Delivered-To: freebsd-questions@freebsd.org Received: from mx1.FreeBSD.org (mx1.freebsd.org [216.136.204.125]) by hub.freebsd.org (Postfix) with ESMTP id 53FE716A4CE for ; Wed, 23 Mar 2005 18:43:02 +0000 (GMT) Received: from kane.otenet.gr (kane.otenet.gr [195.170.0.27]) by mx1.FreeBSD.org (Postfix) with ESMTP id 5A38E43D39 for ; Wed, 23 Mar 2005 18:43:00 +0000 (GMT) (envelope-from keramida@ceid.upatras.gr) Received: from orion.daedalusnetworks.priv (aris.bedc.ondsl.gr [62.103.39.226])j2NIgKsS008499; Wed, 23 Mar 2005 20:42:21 +0200 Received: from orion.daedalusnetworks.priv (orion [127.0.0.1]) j2NIgvwu082229; Wed, 23 Mar 2005 20:42:57 +0200 (EET) (envelope-from keramida@ceid.upatras.gr) Received: (from keramida@localhost)j2NIgvWX082228; Wed, 23 Mar 2005 20:42:57 +0200 (EET) (envelope-from keramida@ceid.upatras.gr) Date: Wed, 23 Mar 2005 20:42:57 +0200 From: Giorgos Keramidas To: Brian John Message-ID: <20050323184257.GA78765@orion.daedalusnetworks.priv> References: <4742.209.87.176.4.1111602542.fusewebmail-19592@webmail.fusemail.com> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <4742.209.87.176.4.1111602542.fusewebmail-19592@webmail.fusemail.com> cc: freebsd-questions@freebsd.org Subject: Re: Simple bash script to grep files for bad keywords X-BeenThere: freebsd-questions@freebsd.org X-Mailman-Version: 2.1.1 Precedence: list List-Id: User questions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 23 Mar 2005 18:43:02 -0000 On 2005-03-23 12:29, Brian John wrote: > Hello, > I am trying to write a simple bash script that will grep all files > in a directory (except ones that start with "00") for certain bad > keywords. Here is what I have so far: > #!/bin/bash > > # This is a simple script to check all sql scripts for bad keywords > > BAD_KEYWORDS='spool echo timing commit rollback' > > for i in $BAD_KEYWORDS; > do > echo "*********************************"; > echo "GREPing for bad keyword '$i'" > echo "*********************************"; > grep $i ./*; > done > > However, I'm not sure how to make it not grep the files that start > with "00". Can anyone help me with this? Use xargs, since it will buy you the extra feature of being able to search through arbitrarily large numbers of files: for _word in ${BAD_KEYWORDS} ;do find . | grep -v '^/00' |\ xargs grep "${_word}" /dev/null done Tips: - The quotes in "${_word}" are probably optional, but it's better to be safe than sorry :-) - The /dev/null is there so that grep will get at least 2 file arguments, even if there is just one file in the current directory, effectively forcing grep(1) to print the filename of this one file if it happens to match the pattern.