SHELL训练营--day4--正则1

正则及正则的意义

有这样一个文本文件,我们需要从里面查找 信息时,需要怎么处理呢?
一行行看么,有计算机,可以让计算机帮助我们查找。
计算机如何查找?如何匹配?这里就涉及到匹配规则,这种规则 ,我们可以称之为正规。
正则表达式(Regular Expression)是一种匹配模式,描述的是一串文本的特征。
在linux中,我们可以用 grep/awk/sed 调用正则表达式,来查找相关信息。
一般情况下,是对行进行查找匹配并进行处理的。
为什么 这样?如果直接对文件进行处理,我们考虑这样的情况 ,文件小时,可以直接加载到内存。那么当文件 有几百M,几个G等,很大时,能直接放入么?如果对文件 进行修改,怎么增删改?所以将文件分为更小的部分,以行为单位。便于处理输出。


grep 命令

> global search regular expression(RE) and print out the line,全面搜索正则表达式并把行打印出来.
> grep 主要是用来搜索文件信息。
> 语法大致是这样: 【grep 参数 ‘匹配字符’  匹配文件】。grep  'root'  /etc/passwd
> 参数说明:
> “-c”: count 统计匹配的行数。
> "-i" : 匹配条件忽略字符的大小写。
> "-n”: 打印匹配信息时,输出所在行号。
> “-v”:  取反的意思,打印出不合规则的行。
> “-A","-B","-C":打印匹配信息相邻的行。A=after,B=before,C=centre.
> "-q": 逻辑判断的意思,常和if 一起使用。如:`if  grep -q hello a.txt ; then echo yes;else echo no; fi `
> "-r": 递归查询,查询 **目录** 下文件是否有匹配到信息。如:`grep -r "root" /etc/`
  • linux下文本行的相关信息

    存储的是以”\n“为行结尾。在做匹配信息时,以"^"表示行的开始,以”$“表示行结束。
    如 匹配以 # 开头时,可以这样写匹配信息:"^#"。
    匹配以"good."结束时,这样写:”good.$“
    表示空行时,”^$“。
    这里涉及到行中有”^“或是”$“时,写法。

    [root@cpdl ~]# cat 1.txt
    good.
    nice. good
    hello
    good.$helo
    [root@cpdl ~]# grep -n "good.$" 1.txt
    1:good.
    [root@cpdl ~]# grep -n "good.\\$" 1.txt
    4:good.$helo    
  • 字符串匹配
    grep -n "root"  /etc/passwd
    grep -vn "nologin"  /etc/passwd
    grep -n '^\(root|bin\)' /etc/passwd
  • 字符匹配
    grep  [0-9]  /etc/passwd
    grep  [^0-9]  /etc/passwd
    grep  "^root[a-z]*$'  /etc/passwd
    grep  "^[rb]"  /etc/passwd
    grep  "[^r]oo"  /etc/passwd
    grep  '^$'  /etc/passwd
    grep  '[^a-zA-Z]'  /etc/passwd
  • 模糊字符串匹配
    grep 'r..t' /etc/passwd
    grep 'oo*' /etc/passwd              #“*”表示零个或多个前面的字符,oo*表示o, oo, ooo.....
    grep '.*' /etc/passwd |wc -l          # ‘.*’表示零个或多个任意字符,空行也包含在内
    grep 'o\{2\}' /etc/passwd
  • grep扩展命令,egrep
    egrep 'o+' 1.txt               # 表示1个或1个以上前面字符
    egrep 'o?' 1.txt               # 表示0个或者1个前面字符
    egrep 'roo|body' 1.txt     # 匹配roo或者匹配body
    egrep 'r(oo)|(at)o' 1.txt   # 用括号表示一个整体
    egrep '(oo)+' 1.txt          # 表示1个或者多个 'oo' 

    . * + ? 总结
    . 表示任意一个字符(包括特殊字符)

    • 表示零个或多个*前面的字符
      .* 表示任意个任意字符(包含空行)
      + 表示1个或多个+前面的字符
      ? 表示0个或1个?前面的字符
      其中,+ ? grep不支持,egrep才支持。

sed

sed: stream editor for filtering and transforming text 用户过滤和转换文本的流编辑器
sed 主要是用来实现查找 替换功能。
命令格式:“sed [option] 'sed command' filename”

  • option 参数说明

    -n :只打印模式匹配的行
    -e :直接在命令行模式上进行sed动作编辑,此为默认选项
    -r :支持扩展表达式
    -i :直接修改文件内容

猜你喜欢

转载自blog.51cto.com/sincethen/2333638