zoukankan      html  css  js  c++  java
  • Linux三大文本处理工具之grep命令

    grep (Global Regular Expression Print)是一个强大的文本搜索工具,能使用正则表达式搜索文本,并把匹配的行打印出来。
    grep的工作方式是在一个或多个文件中搜索字符串模板。

    (1) 命令格式

    grep [option] pattern file

    或者作为管道符号
    cat file |grep [option] pattern

    (2)命令参数

    • -a : 不要忽略二进制的数据。

    • -d 或 -r : 当指定要查找的是目录而非文件时,必须使用这项参数。

    • -E :开启扩展(Extend)的正则表达式。

    • -i :忽略大小写(ignore case)。

    • -v :反过来(invert),只打印没有匹配的,而匹配的反而不打印。

    • -n :显示行号

    • -w :被匹配的文本只能是单词,而不能是单词中的某一部分,如文本中有liker,而我搜寻的只是like,就可以使用-w选项来避免匹配liker

    • -c :显示总共有多少行被匹配到了,而不是显示被匹配到的内容,注意如果同时使用-cv选项是显示有多少行没有被匹配到。

    • -o :只显示被模式匹配到的字符串。

    • --color :将匹配到的内容以颜色高亮显示。

    • -A n:显示匹配到的字符串所在的行及其后n行,after

    • -B n:显示匹配到的字符串所在的行及其前n行,before

    • -C n:显示匹配到的字符串所在的行及其前后各n行,context

    • -f<规则文件> 指定规则文件,其内容含有一个或多个规则样式,让grep查找符合规则条件的文件内容,格式为每行一个规则样式。

    (3) 规则匹配符

    • ^ 锚定行的开始, 如'^grep'匹配所有以grep开头的行。

    • $ 锚定行的结束, 如'grep$'匹配所有以grep结尾的行。

    • . 匹配一个非换行符的字符,如'gr.p'匹配gr后接一个任意字符,然后是p。

    • * :匹配其前面出现的内容任意次,等价于{0,},其中 .* 表述任意字符任意次,即无论什么内容全部匹配。

    • [ ] 匹配一个指定范围内的字符,如'[Gg]rep'匹配Grep和grep。

    • [^] 匹配一个不在指定范围内的字符,如:'[^A-FH-Z]rep'匹配不包含A-R和T-Z的一个字母开头,紧跟rep的行。

    • (..) 标记匹配字符,如'(love)',love被标记为1。

    • < 锚定单词的开始,如'<grep'匹配包含以grep开头的单词的行。

    • > 锚定单词的结束,如'grep>'匹配包含以grep结尾的单词的行。

    • x{m} 重复字符x,m次,如'0{5}'匹配包含5个o的行。

    • x{m,} 重复字符x,至少m次,如'o{5,}'匹配至少有5个o的行。

    • x{m,n} 重复字符x,至少m次,不多于n次,如'o{5,10}'匹配5--10个o的行。

    • x? 匹配其前面出现的内容x 0次或1次,等价于x{0,1}。

    • w 匹配文字和数字字符,也就是[A-Za-z0-9],如'Gw*p'匹配以G后跟零个或多个文字或数字字符,然后是p。

    • W w的反置形式,匹配一个或多个非单词字符,如点号句号等。

    •  单词锁定符,如'grep'只匹配grep。

    分组及引用

    (string) :将string作为一个整体方便后面引用

    • 1 :引用第1个左括号及其对应的右括号所匹配的内容。

    • 2 :引用第2个左括号及其对应的右括号所匹配的内容。

    • :引用第n个左括号及其对应的右括号所匹配的内容。

    对于一些常用的字符集,系统做了定义

    • [A-Za-z] 等价于 [[:alpha:]]

    • [0-9] 等价于 [[:digit:]]

    • [A-Za-z0-9] 等价于 [[:alnum:]]

    • tab,space 等空白字符 [[:space:]]

    • 等价于 [[:upper:]]

    • [a-z] 等价于 [[:lower:]]

    • 标点符号 [[:punct:]]

    (4) 使用实例

    • ps -ef|grep svn -c 显示包含svn的进程个数
    • ps aux | grep ssh | grep -v "grep" 不显示本身进程
    • cat test.txt | grep -nf test2.txt 从文件中读取关键词搜索,表明行号
    • cat test.txt |grep ^[^u] 输出非u开头的行内容
    • cat test.txt |grep -E "ed|at" 显示包含ed或者at字符的内容行
    • grep '[a-z]{7}' *.txt 显示当前目录下面以.txt 结尾的文件中的所有包含每个字符串至少有7个连续小写字符的字符串的行
    • grep -r "import_to_oracle" /home/import 显示在某个目录下,包含import_to_oracle关键字的行。

    参考链接:
    https://www.cnblogs.com/flyor/p/6411140.html

  • 相关阅读:
    ANDROID – 單色漸層效果的改良 – GRADIENT SCRIMS(转)
    ANDROID – TOOLBAR 上的 NAVIGATION DRAWER(转)
    ANDROID – TOOLBAR STEP BY STEP(转)
    Android设计和开发系列第二篇:Action Bar(Develop—Training)
    Android设计和开发系列第二篇:Action Bar(Develop—API Guides)
    Android设计和开发系列第二篇:Action Bar(Design)
    Android英文文档翻译系列(6)——LocalBroadcastManager
    Android设计和开发系列第一篇:Notifications通知(Develop—API Guides)
    Android设计和开发系列第一篇:Notifications通知(Develop—Training)
    Apache与Nginx虚拟主机设置(多域名和多端口的区别)
  • 原文地址:https://www.cnblogs.com/laiyaling/p/12780546.html
Copyright © 2011-2022 走看看