本文并没有翻译全部内容,只翻译重要部分,而且也不是机械翻译,我参考了man,有些用自己的话概括。
grep命令是linux下非常常用且重要的命令,搭配正则表达式食用味道更佳哦
grep 基本语法:
grep 'word' filename
grep 'word' file1 file2 file3
grep 'string1 string2' filename
cat otherfile | grep 'something'
command | grep 'something'
command option1 | grep 'data'
grep --color 'data' filename
用grep搜寻字符串
grep "string" filename
string就是你想搜的字符串,-i 选项可以忽略大小写
用grep进行迭代搜寻
grep -[rR] "string" filename
如果你要对一个目录下所有文件进行搜寻,加上所有文件绝对是笨办法,如上所示,r或R选项可以进行迭代搜索匹配。但是它不仅会打印匹配的那一行,还会把包含此行的文件路径打印出来,可以使用-h选项取消显示路径
用grep只搜寻单词
grep -w "word" filename
比如你搜abc时,grep会找出所有包含的串比如kbabc,abc123等等。使用如上命令则只匹配单个单词而不会出现组合情况。
用grep搜寻单词word1或单词word2
egrep -w "word1|word2" filename
注意,此处用egrep,egrep=grep -E,E就是extended regular expression的意思。表示把选项后面的PATTERN当作正则表达式处理,当然你也可以用grep -E来代替egrep
统计匹配成功的行数
grep -c "word" filename
c就是count计数的意思,它只会显示行数而不显示匹配行的内容
显示匹配的行在文件中是第几行
grep -n "word" filename
它在输出的每个匹配行前面加上此行在文件中的行数
匹配不包含串的行
grep -v "string" filename
v就是invert的意思,它会匹配不包含串string的行
仅输出包含或不包含匹配串的文件
grep -[Ll] "string" filename
大写L列出不包含匹配串的文件,小写l则相反。
因为我的a,b文件中都有这两个之一的单词,所以第一个命令没有输出
带颜色的输出
grep --color "string“ filename
一般grep都是grep --color=auto的别名,所以是带别名的。如果没有则使用上面的命令即可
匹配多种模式
grep -e "model1" -e "model2" -e "model3" filename
grep -e "-model1" -e "model2" -e "model3" filename
之前我们都只是匹配一种模式,如果要匹配多种模式可以使用上面的命令。我们知道,在命令中一个串前面加上-会被命令当成他的选项,这样我们便不能匹配含有-开头的串,即使用引号扩起来也没有,只有使用如上第二个命令
限制grep输出的行数
grep -m5 "string" filename
5可以换成其他任意整数,grep保证输出的行数不会大于这个整数
从文件中读取要匹配的串
grep -f string_file filename
当你想从文件中读取你要匹配的串时可以用-f参数,以行为单位。string_file里存储的仅仅是你想匹配的字符串
只显示和匹配串完全匹配的行
grep -x "string" filename
也就是行必须和string串一模一样,否则不显示
只通过返回值判断是否有匹配而不显示任何输出
grep -q "string" filename
echo $?
如果你不想让grep产生任何输出而只想通过grep的返回值来判断是否有匹配的行,则可以使用上面的组合命令,第一条命令的q表示quiet的意思,第二条命令就是输出上一条命令的执行状态,0表示有匹配行,1表示没有。
不显示错误或警告信息
grep -s "string" filename
递归匹配目录下所有文件
grep -d recurse "string" [dir filename]
这个命令和前面提到的递归匹配的-r参数效果是一样的,另外当把recurse改为option时等同于-s参数禁止显示所有警告,错误信息。当把recurse改为skip时会跳过所有目录,也就是当搜到一个目录时grep不递归到目录里面搜索
以NULL字符作为输出的文件名的结尾字符
grep -Zl "string" filename
上文提到过-l参数可以只输出文件名,但是其实这些文件名是以换行符\n终止的,这对于在脚本中就不方便后续处理。使用-Z和-l参数结合,-l参数使grep只输出文件名,-Z参数则使这些文件名以NULL结尾
在显示匹配行时同时显示周围的行
grep -[BCA] num "string" filename
一般输出的只是匹配的行,-B参数可以让你输出匹配行的前num行,-C参数让你输出匹配行上下num行,-A参数让你输出匹配行的下面num行
只输出匹配的字符串
grep -o "string" filename
默认情况会输出匹配成功的行,而上述命令可以让你只输出字符串。
显示匹配行或匹配串在文件中的偏移量
grep -b "string" filename
grep -o -b "string" filename
第一个命令会在输出的匹配行前面输出此行在文件中的偏移量,第二个命令会在前面输出此串在文件中的偏移量
原文链接:
阅读(711) | 评论(0) | 转发(0) |