Chinaunix首页 | 论坛 | 博客
  • 博客访问: 152371
  • 博文数量: 69
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 595
  • 用 户 组: 普通用户
  • 注册时间: 2016-07-16 00:00
个人简介

宁可逆流而上与众不同,也不顺风顺水随波逐流

文章分类

全部博文(69)

文章存档

2020年(1)

2018年(9)

2017年(43)

2016年(16)

我的朋友

分类: LINUX

2017-04-01 01:50:50

本文并没有翻译全部内容,只翻译重要部分,而且也不是机械翻译,我参考了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) |
给主人留下些什么吧!~~