On Mon, Feb 21, 2011 at 11:30 PM, Andres Perera <andre...@zoho.com> wrote: > On Mon, Feb 21, 2011 at 7:01 PM, Philip Guenther <guent...@gmail.com> wrote: >> On Mon, Feb 21, 2011 at 2:30 PM, Fred Crowson <open...@crowsons.net> wrote: >>> On 02/21/11 15:54, Alexander Schrijver wrote: >> ... >>>> grep(1) only prints the filename when it receives more then 1 filename as >>>> arguments. Thus, when you do this: >>>> >>>> $ find . -name '*.c' -exec grep bla {} \; >>>> >>>> It doesn't print the filename. >>>> >>>> But when you use xargs(1), like Bret suggests it does. >>> >>> $ find . -name "*.php" -exec grep blah {} \; -print >>> >>> Will print the file name after the line that grep matches. >> >> The other classical solution is to always pass multiple filenames by >> including a /dev/null argument: >> >> B B find . -name '*.c' -exec grep bla {} /dev/null \; >> >> That works with the xargs case too: >> >> B find . -name '*.c' -print0 | xargs -0 grep bla /dev/null > > these two ugly hacks and the the redundant flag have been sought while > what's natural has been overlooked > > find . -name '*.c' -exec awk '/bla/ {print FILENAME $0}' > > why complicate grep? >
because they forgot to read 'Program Design in the UNIX Environment'? iru