LINUX学习笔记_Shell脚本_正则表达式

LINUX学习笔记

Shell脚本_正则表达式

1. 正则表达式与通配符
2. 基础正则表达式
3. 支持正则表达式的命令

1. 正则表达式与通配符

  • 正则表达式用来在文件中匹配符合条件的字符串,正则是包含匹配。grep, awk, sed等命令可以支持正则表达式
  • 通配符(*:匹配任意字符, ?:匹配任意一个字符, [ ]:匹配中括号中指定的任意一个字符)用来匹配符合条件的文件名,通配符是完全匹配。Ls, find, cp 这些命令不支持正则表达式,所以只能使用shell自己的通配符进行匹配。

2. 基础正则表达式
LINUX学习笔记_Shell脚本_正则表达式_第1张图片


3. 支持正则表达式的命令

1). 字符截取命令

  • Grep命令
    在文件中提取符合条件的行

  • Cut字段提取命令
    在文件中提取符合条件的列
    命令格式:cut [选项] 文件名
    选项:
    -f 列号:提取第几列
    -d分隔符:按照指定分隔符分割列
    默认分隔符是制表符,“Tab”键
    例子1:
    LINUX学习笔记_Shell脚本_正则表达式_第2张图片
    例子2:
    在这里插入图片描述
    注意:cut一般与grep命令通过管道符的形式联合使用
    例子3:
    LINUX学习笔记_Shell脚本_正则表达式_第3张图片
    Cut命令的局限:如果是用空格作为分隔符,cut命令不能识别,可以使用awk命令
    df -h 命令:查看分区的使用状况

  • Awk命令
    在文件中提取符合条件的列

    Printf命令

    • 格式化输出命令

    • 命令格式:printf ‘输出类型输出格式’ 输出内容

    • 输出类型:

      %ns: 输出字符串。N是数字,指代输出几个字符
      %ni: 输出整数。N是数字,指代输出几个数字
      %m.nf: 输出浮点数。M和n是数字,指代输出的整数位和小数位数。如%8.2f代表共输出8位数,其中2位小数,6位整数.

    • 输出格式:
      LINUX学习笔记_Shell脚本_正则表达式_第4张图片
      注意
      如果不加引号,则认为所有的字符串为一个整体,且无任何格式
      在这里插入图片描述
      如果不加引号,且输入多个输出类型,则只识别第一个输出类型,其余的视为字符串
      在这里插入图片描述
      加单引号或者双引号,才被视为输出类型定义
      在这里插入图片描述
      加单引号或者双引号,并且定义输出格式
      在这里插入图片描述
      Printf命令不能直接加文件名,也不能加管道符执行前一个命令的执行结果.

Awk命令的输出中,支持print和printf命令:

  • Print:print会在每个输出之后自动加入一个换行符(linux默认没有print命令),只能在awk命令中用,不能在linux系统中用.
  • Printf:printf是标准格式输出命令,并不会自动加入换行符,如果需要换行,则需要手动加入换行符

Awk命令

  • 命令格式:awk’条件1{动作1} 条件2{动作2}…’文件名

  • 条件(pattern):

    一般使用关系表达式作为条件
    x>10 判断变量x是否大于10
    x>=10 大于等于
    x<=10 小于等于

  • 动作(action)

    格式化输出:printf
    流程控制语句:if, for…

  • 例子1
    LINUX学习笔记_Shell脚本_正则表达式_第5张图片
    例子2:与管道符搭配使用,且输出文件有空格为分隔符,使用print命令
    LINUX学习笔记_Shell脚本_正则表达式_第6张图片
    例子3:与grep命令一起搭配管道符使用
    LINUX学习笔记_Shell脚本_正则表达式_第7张图片

BEGIN命令

  • 命令格式:awk ‘BEGIN{printf ”This is a transcript\n”}{printf$2”t”$6”\n”}’student.txt
  • 含义:在所有的数据读取之前,处理printf”This is a transcript\n”,然后再处理printf$2”t”$6”\n”
  • 例子:
    LINUX学习笔记_Shell脚本_正则表达式_第8张图片

FS内置变量

  • 命令格式:cat /etc/passwd | grep”/bin/bash” | \awk’BEGIN{FS”:”}{printf$1”\t”$3”\n”}’
  • FS内置变量,指定分隔符;awk默认的分隔符是空格和制表符tab
  • 注意:Awk在执行时,先读入第一行数据,然后再执行条件.
  • 例子1:
    LINUX学习笔记_Shell脚本_正则表达式_第9张图片
    例子2:
    LINUX学习笔记_Shell脚本_正则表达式_第10张图片

END命令

  • 命令格式:awk’END{printf”The End\n”} {printf$2”\t”$6”\n”}’ student.txt
  • 含义:在所有命令执行完之后,执行END条件后的动作{printf”The End\n”}

关系运算符

  • 命令格式:cat student.txt|grep -v Name|\awk’$6>=87{printf$2”\n”}’
  • 命令含义:读取student.txt文件的内容,然后选择不包含Name的行,然后如果第6列的数据大于等于87,输出第2列
  • 例子:
    LINUX学习笔记_Shell脚本_正则表达式_第11张图片

sed命令

  • sed是一种几乎包括在所有UNIX平台(包括linux)的轻量级流编辑器。主要用来将数据进行选取,替换,删除,新增的命令.不仅能够修改文件,而且可以搭配管道符,修改文件操作的结果。

  • Vi编辑器,只能修改文件内容,不能直接修改文件操作的结果,如果想修改,需要将结果写入另一个vi编辑器。

  • 命令格式:sed [选项]‘[动作]’文件名

  • 选项:

    -n: 一般sed命令会把所有数据抖输出到屏幕,如果加入此选项,则只会把经过sed命令处理的行输出到屏幕上
    -e:允许对输入数据应用多条sed命令编辑,条件之间用;分隔开
    -i:用sed的修改结果直接修改读取数据的文件,而不是由屏幕输出

  • 动作:
    LINUX学习笔记_Shell脚本_正则表达式_第12张图片

  • 字符串替换

  • 命令格式:sed’s/旧字串/新字串/g’文件名

  • 例子
    LINUX学习笔记_Shell脚本_正则表达式_第13张图片


参考资料:兄弟连linux视频 Thanks ^^

【注】:个人学习笔记,如有错误,望不吝赐教,这厢有礼了~~~


你可能感兴趣的:(LINUX学习笔记,#,Shell脚本,字符串,shell,awk,正则表达式,linux)