一个grep命令可以对多个文件进行搜索:

grep "match_text" file1 file2 file3
 
--color选项,可以在输出行中标出匹配到的单词:
grep "match_text" file1 --color=auto
 
-E 选项,可以使用正则表达式,也可以使用默认允许正则表达式的命令egrep:
egrep "[a-z]+" file1
 
-o选项,只输出文件中匹配到的文本部分:
echo this is a line. | egrep -o "[a-z]+\."
 
-v选项,可以打印除包含 match_pattern的行之外的所有行:
grep -v match_pattern file
-v可以讲匹配结果进行反转。
 
 
从文件中统计匹配项的数量,可以使用下面的技巧:
echo -e "1 2 3 4\nhello\n5 6" | egrep -o "[0-9]" | wc -l
 
-R选项,递归搜索文件
grep "text" . -R -n
 
例如:
cd src_dir
grep "test_function()" . -R -n
 
-i选项,忽略样式中的大小写
echo hello world | grep "HELLO"
hello
 
-e选项,可以用来指定多个匹配样式:
grep -e "pattern1" -e "pattern"
 
--include选项,搜索包含的文件:
例如,在目录中递归搜索所有的.c和.cpp文件
grep "main()" . -r --include *.{c,cpp}
 
--exclude选项,排除文件:
例如,排除所有的README文件
grep "main()" . -r --exclude "README"
 
--exclude-dir选项,排除目录。
 
-q选项,实现grep的静默输出。
如果我们需要知道一个文件是否包含指定的文本。我们可以用静默输出-q来实现,
在静默输出中grep不会像标准输出打印任何输出。它仅允许命令,然后去根据命令的执行成功与否返回退出状态。
例如脚本:
if [ $# -ne 2 ];then
echo "$0 match_text filename"
fi
 
match_text=$1
filename=$2
 
grep -q $match_text $filename
 
if [$? -eq 0 ];then
 echo "the text exists in the file";
else
 echo "text does not exist in the file";
fi
 
./silent_grep.sh studen studen_data.txt
 
打印出匹配文本之前或之后的行
 
要打印匹配结果之后的3行,使用-A选项:
seq 10 | grep 5 -A 3
 
要打印匹配结果之前的3行,使用-B选项:
seq 10 | grep 5 -B 3
 
要打印匹配结果之前和之后的3行,使用-C选项:
seq 10 grep 5 -C 3
 
如果有多行匹配,那么以一行“--”作为各匹配之间的定界符:
echo -e "a\nb\nc\na\nb\c" | grep -a -A 1