You can use the
option -c to tell you how many occurrences of a pattern appear
in a given file, so you can also use it to find files that don't contain
a pattern (i.e., zero occurrences of the pattern).
Let's say you're indexing a
document and you
want to make a list of files that don't yet contain indexing macros. What
you need to find are files with zero occurrences of the string
grep -c "\.XX" chapter*
might produce the following output:
chapter1:10 chapter2:27 chapter3:19 chapter4:0 chapter5:39 ...
This is all well and good, but suppose you need to check index entries in hundreds of reference pages? Well, just filter grep's output by piping it through another grep. The above command can be modified as follows:
grep -c "\.XX" chapter* | grep :0
This results in the following output:
you can save the output as a list of files.
For example, here's a trick for creating a list of files that
don't contain index macros:
grep -c "\.XX" * | sed -n s/:0//p > ../not_indexed.list
The sed -n command prints only the lines that contain
it also strips the
:0 from the output so that
../not_indexed.list contains a list of files, one per line.
puts the not_indexed.list file into the parent directory - this is one
easy way to keep grep from searching that file, but may not be
worth the bother.
[To edit all files that need index macros added, you could type:
vi `grep -c "\.XX" * | sed -n s/:0//p`
#!/bin/sh case $# in 0|1) echo "Usage: `basename $0` pattern file [files...]" 1>&2 ;; *) pat="$1"; shift grep -c "$pat" "$@" | sed -n 's/:0$//p' ;; esac
Then you can type, for example,
vi `vgrep "\.XX" *`. -JP ]