shell编程基础(二)

一、初识正则表达式

1. 基本语法

1.1 字符类

字符 含义 举例
. 匹配任意一个字符 abc.可以匹配abcd、abc9
[] 匹配括号中的任意一个字符 [abc]d可以匹配ad、bd、或cd
- 在[]括号内表示字符范围 [0-9a-fA-F]可以匹配一位十六进制数
^ 位于[]括号内的开头,匹配括号中字符之外的任意字符 [^xy]匹配出xy之外的其他字符,因此[ ^xy]1可以匹配a1、b1、但是不匹配x1、y1
[[:xxx:]] grep工具预定义的一些命名字符类 [[:alpha:]]匹配一个字母,[[:digit:]]匹配一个数字

1.2 数量限定符

字符 含义 举例
紧跟在它前面的单元应匹配零次或一次 [0-9]?\ .[0-9]:匹配0.0、2.3等
+ 紧跟在它前面的单元应匹配一次或多次 [a-zA-Z0-9_.-][email protected][a-zA-Z0-9 .-]+:匹配email地址
* 紧跟在它前面的单元应匹配零次或多次 [0-9] [0-9]*匹配至少一位数字
{N} 紧跟在它前面的单元应精准匹配N次 [1-9] [0-9]{2}:匹配从100到999的整数
{N,} 紧跟在它前面的单元应匹配至少N次 [1-9] [0-9]{2,}:匹配三位以上整数
{,M} 紧跟在它前面的单元应匹配最多M次 [0-9] {,1}相当于[0-9]?
{N,M} 紧跟在它前面的单元应匹配至少N次,最多M次 [0-9] {1,3}\ .[0-9]{1,3}\ .[0-9] {1,3}\ .[0-9]{1,3}:匹配ip地址

1.3 位置限定符

字符 含义 举例
^ 匹配行首的位置 ^Content匹配位于一行开头的Content
$ 匹配行末的位置 :KaTeX parse error: Expected group after '^' at position 15: 匹配位于一行结尾的 : 号,^̲匹配空行
\ < 匹配单词开头的位置 \ <th匹配. . . this,但不匹配ethernet、tenth
\ > 匹配单词结尾的位置 p\ >匹配leap. . .,但不匹配parent、sleepy
\b 匹配单词开头或结尾的位置 \bat\b匹配. . . at . . .,但不匹配cat、atexit、batch
\B 匹配非单词开头和结尾的位置 \Bat\B匹配battery,但不匹配. . . attend、hat . . .

1.4 特殊字符

字符 含义 举例
\ 转义字符,普通字符转义为特殊字符,特殊字符转义为普通字符 普通字符<写成\ <表示单词开头的位置,特殊字符 . 写成\ .
() 将正则表达式的一部分组成一个单元,可以对整个单元使用数量限定符 ([0-9] {1,3}\ .){3}[0-9]{1,3}匹配ip地址
| 连接两个子表达式,表示或的关系 n(o|rither)匹配no或neither

2. Basic正则和Extended正则

Basic正则也有Extended的一些语法,只是字符?+{}|()应解释为普通字符,要表示这些字符的含义必须对其进行转义。如果用grep而不是egrep,并且没有加-E参数,则应该遵照Basic规范

二、grep命令

1. 概述

Linux系统中grep命令是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并将匹配的行打印出来,全程称是Global Regular Expression Print,表示全局正则表达式版本,使用权限为所有用户。

grep家族包括egrep、和fgrep。egrep是grep的扩展,支持更多的re元字符,fgrep将所有字母都看作单词,也就是正则表达式中的元字符表示回其自身的字面意义,不再特殊。

2. 格式及参数

  • grep [options]
  • -c:只输出匹配行的计数
  • -i:不区分大小写
  • -h:查询多文件时不显示文件名
  • -l:查询多文件时值输出包含匹配字符的文件名
  • -n:显式匹配行和行号
  • -s:不显示不存在或无匹配文本的错误信息
  • -v:显式不包含匹配的所有行
  • –color=auto:可以将找到的关键词部分加上颜色显式
    shell编程基础(二)

三、find命令

  • find用于查找文件

  • -name:find ./ -name “init” find /目录位置 参数 “匹配项”

  • -size:find ./ -size +3M -size -7M

  • -type:-d/-f/-p/-l/-c/-b:查找指定类型的文件

  • -maxdepth:find ./ -maxdepth 2 -type d:指定搜索的层级

  • -exec:find ./ -maxdepth 2 -type d -size +2k -exec ls -l {} ;
    shell编程基础(二)

  • -ok:find ./ -maxdepth 1 -type d -ok rm -rf {} ;
    shell编程基础(二)

  • -xargs:将搜索到的结果集进行分批处理

  • -atime|ctime|mtime:天为单位—>a表示访问,c表示文件内容修改,m:表示文件属性修改

四、sed命令

sed为流编辑器(Stream Editor),在脚本中作为过滤器进行使用,即将前一个程序的输出引入sed的输入,经过一系列编辑命令转换为另一种格式输出

  • sed option ‘script’ file1 file2……

常用选项

  • -n,–queit,–silent:静默输出,默认情况下sed程序在所有脚本执行完会自动打印模式空间的内容,使用此参数可以进行屏蔽

  • -e script:允许多个脚本命令执行

  • -f script-file:从文件中读取脚本指令

  • -i,–in-place:直接修改源文件

  • a:追加
    shell编程基础(二)

  • d:删除
    shell编程基础(二)

  • 替换
    shell编程基础(二)

  • sed -i ‘s/[字符串]/-&-/’ [文件名]:&的含义为取地址,及它代表前面的字符串

五、awk

sed以行为单位处理文件,AWK既可以以行为单位也可以一列为单位。awk缺省的行分隔符是换行,缺省的列分隔符是连续的空格和tab键,但是行分隔符和列分隔符都可以自定义,可以将没一行若干字段以:分割,就可以重新定义awk的列分隔符为:,并以列为单位处理文件

  • awk option ‘script’ file1 file2……
  • awk option -f scriptfile file1 file2 ……
    shell编程基础(二)
  • awk ‘/^ *$/ {var=var+1} END {print var}’ [文件名]:统计文件中的所有空行

awk中预定义的变量

  • FILENAME:当前输入文件的文件名,该变量为只读

  • NR:当前行的行号,该变量为只读

  • NF:当前行所拥有的列数,该变量为只读

  • OFS:输出格式列分隔符,缺省为空格

  • FS:输出文件的列分隔符,缺省为连续空格和Tab

  • ORS:输出格式的行分隔符,缺省是换行符

  • RS:输出文件的行分隔符,缺省是换行
    shell编程基础(二)

  • 统计进程号大于7000小于8000
    shell编程基础(二)

六、其他

相关文章: