一个grep命令可以对多个文件进行搜索:
grep的那些事
原创
©著作权归作者所有:来自51CTO博客作者116646695的原创作品,请联系作者获取转载授权,否则将追究法律责任
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
下一篇:awk入门
提问和评论都可以,用心的回复会被更多人看到
评论
发布评论
相关文章
-
数学的那些事
1.斯格林公式:
错排 i++ 其他 -
网络的那些事
网络的那些事
网络的那些事