Linux学习笔记_5_shell编程之正则表达式

shell编程之正则表达式
https://www.imooc.com/learn/378

简介: 正则表达式在查找中的作用是非常重要的。本课程是《Tony老师聊shell》系列课程的第四篇,
为你带来Linux shell中的正则表达式,字符截取命令cut、printf、awk和sed,字符处理命令sort和wc。

目录:
第1章 正则表达式
介绍正则表达式与通配符的概念,通过大量的案例演示正则表达式的使用。
1-1 什么是正则表达式 (05:06)
1-2 shell编程之正则表达式与通配符 (09:03)
1-3 shell编程之基础正则表达式1 (07:52)
1-4 shell编程之基础正则表达式2 (10:35)
1-5 shell编程之基础正则表达式3 (10:34)
1-6 shell编程之正则表达式案例 (06:33)
第2章 字符截取命令
本章介绍常用字符截取命令cut、printf、awk和sed。
2-1 shell字符截取命令之cut命令 (17:12)
2-2 shell字符截取命令之printf命令 (13:29)
2-3 shell字符截取命令之awk命令(上) (09:20)
2-4 shell字符截取命令之awk命令(下) (12:39)
2-5 shell字符截取命令之sed命令(上) (08:38)
2-6 shell字符截取命令之sed命令(下) (09:35)
第3章 字符处理命令
本章介绍常用字符处理命令sort和wc。
3-1 shell字符处理命令之字符处理命令 (08:51)

笔记:
1-1 什么是正则表达式 (05:06)

  1. 正则表达式是用于描述字符排列和匹配模式的一种语法规则。简单讲,它主要用于字符串的模式分割、匹配、查找及替换操作

1-2 shell编程之正则表达式与通配符 (09:03)

  1. 正则表达式用来在文件中匹配符合条件的字符串,正则是包含匹配。grep、awk、sed等命令可以支持正则表达式
  2. 通配符用来匹配符合条件的文件名,通配符是完全匹配。ls、find、cp这些命令不支持正则表达式,所以只能用shell自己的通配符来进行匹配了
  3. 通配符只有3个,?代表一个字符,*代表任意字符,[]代表括号内的任意一个字符

1-3 shell编程之基础正则表达式1 (07:52)
1-4 shell编程之基础正则表达式2 (10:35)
1-5 shell编程之基础正则表达式3 (10:34)

  1. 基础正则表达式,见表格
    Linux学习笔记_5_shell编程之正则表达式_第1张图片
  2. " 前一个字符匹配0次,或任意多次。 "a” 匹配所有内容,包括空白行。"aa*"匹配至少包含一个a的行
  3. “.” 匹配除了换行符以外任意一个字符。"s…d"匹配在s和d这两个字母之间一定有两个字符的单词
  4. “^” 匹配行首。"^M"匹配以大写M开头的行
  5. " " 匹 配 行 尾 。 " n " 匹配行尾。"n ""n“匹配以小写n结尾的行。”^$"匹配空白行
  6. “[]” 匹配中括号中指定的任意一个字符,只匹配一个字符。"[0-9]“匹配任意一个数字。”[a-z]"匹配任意一个小写字母
  7. “[^]” 匹配除中括号的字符以外的任意一个字符,也就是取反的意思。"[a-z]"匹配不用小写字母开头的行
  8. “” 转义符,去除符号的特殊含义。".$“匹配使用”."结尾的行
  9. "{n}"表示其前面的字符恰好出现n次。"a{3}"匹配a字母连续出现三次的字符串

1-6 shell编程之正则表达式案例 (06:33)

  1. 匹配日期格式YYYY-MM-DD
    [0-9]{4}-[0-9]{2}-[0-9]{2}
  2. 匹配IP地址
    [0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}

2-1 shell字符截取命令之cut命令 (17:12)

  1. grep是行提取命令,cut是列提取命令。
    grep “/bin/bash” /etc/passwd | grep -v “root” 得到所有非root用户
  2. cut [选项] 文件名 ,主要的选项 -f 列号:提取第几列、-d 分隔符:按照指定分隔符分割列
    grep “/bin/bash” /etc/passwd | grep -v “root” | cut -f 1 -d “:” 得到所有非root用户的用户名
    cut命令默认的分隔符是制表符(Tab键),适用于比较规律的文档,不适合用空格作为分隔符的文档

2-2 shell字符截取命令之printf命令 (13:29)

  1. printf是awk需要用到的,所以先学习一下。
  2. printf ‘输出类型输出格式’ 输出内容

2-3 shell字符截取命令之awk命令(上) (09:20)
2-4 shell字符截取命令之awk命令(下) (12:39)

  1. awk ‘条件1{动作1} 条件2{动作2}…’ 文件名
    条件 : 一般使用关系表达式作为条件
    动作 : 格式化输出或流程控制语句
  2. awk的执行流程,awk首先读取文件第一行,把文件名赋值给$0,把第一个字段赋值给$1,依次赋值。然后判断条件1,满足则执行动作1。然后awk读取文件第二行…
  3. {printf $2 “\n”} 等价于 {print $2} ,所以以后可以尽量用print,少写一个\n
  4. BEGIN,END 都是关系表达式。awk ‘BEGIN{FS=":"}{print $2}’ 指定分隔符为":"
  5. “>,<,=” 也是关系表达式。awk ‘$4>=70{print $2}’

2-5 shell字符截取命令之sed命令(上) (08:38) & (下) (09:35)

  1. sed其实主要用来字符的替换,叫字符替换命令更加合适。
  2. sed命令简介:sed是一种几乎包括在所有的UNIX平台(包括Linux)的轻量级流编辑器。sed主要是用来将数据进行选取、替换、删除、新增的命令。
  3. sed命令格式:sed [选项] ‘[动作]’ 文件名
  4. 常用选项
    -n : 一般sed命令会把所有数据都输出到屏幕,如果加入此选项,则只会把经过sed命令处理的行输出到屏幕
    -e : 允许对输入数据应用多条sed命令编辑
    -i : 用sed命令的修改结果直接修改读取数据的文件,而不是由屏幕输出
  5. 常用动作
    a : 追加,在当前行后添加一行或多行
    举例,sed ‘2a tian jia yi hang’ student.txt ,在第二行的后面加了一行
    c : 行替换,用c后面的字符串替换原数据行
    举例,sed ‘2c ti huan yi hang’ student.txt ,把第二行替换成ti huan yi hang
    i : 插入,在当前行前插入一行或多行
    举例,sed ‘2i tian jia yi hang’ student.txt ,在第二行的前面加了一行
    d : 删除,删除指定的行
    举例,sed ‘2,4d’ student.txt ,删除第二行到第四行,但是不修改文件本身(因为没有加-i)
    p : 打印,输出指定的行
    举例,sed -n ‘2p’ student.txt ,读取student.txt文件的第二行
    s : 字符串替换,用一个字符串替换另外一个字符串。格式为“行范围s/旧字符串/新字符串/g”
    举例,sed ‘3s/60/99/g’ student.txt ,把第三行中的60换成99
    举例,sed -e ‘s/fengj//g;s/cang//g’ student.txt ,同时把fengj和cang替换为空

3-1 shell字符处理命令之字符处理命令 (08:51)

  1. 排序命令sort
    sort [选项] 文件名
    -f : 忽略大小写
    -n : 以数值型进行排序,默认使用字符串型排序
    -r : 反向排序
    -t : 指定分隔符,默认分隔符是制表符
    -k n[,m] : 按照指定的字段范围排序。从第n字段开始,m字段结束(默认到行尾)
  2. 统计命令wc
    wc [选项] 文件名
    -l : 只统计行数
    -w : 只统计单词数
    -m : 只统计字符数(会统计回车符)

你可能感兴趣的:(Linux基础)