Linux-Shell-基础之正则表达式

第1章 正则表达式

1-1 什么是正则表达式

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

1-2 正则表达式与通配符

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

1-3 基础正则表达式

元字符 作用
* 前一个字符匹配 0 次或任意多次
. 匹配除了换行符外任意一个字符
^ 匹配行首,例如:^hello 会匹配以 hello 开头的行
$ 匹配行尾,例如:hello& 会匹配以 hello 结尾的行
[] 匹配中括号中指定的任意一个字符,只匹配一个字符。
[^] 匹配除中括号的字符以外的任意一个字符
\ 转义符,用于取消讲特殊符号的含义取消
\{n\} 表示其前面的字符恰好出现 n 次
\{n,\} 表示其前面的字符出现不小于 n 次
\{n,m\} 表示其前面的字符至少出现 n 次,最多出现 m 次

第2章 字符截取命令

  • cut 列提取字符串
    • cut [选项] 文件名
      • -f 列号:提取第几列
        • cut -f 2 student.txt 截取第二列
        • cut -f 2,4 student.txt 截取第二、第四列
      • -d 分隔符:按照指定分隔符分割列
        • grep "/bin/bash" /etc/passwd |grep -v "root" | cut -f 1 -d ":"
  • printf 格式化输出命令
    • printf '输出类型输出格式' 输出内容
      • 输出类型
        • %ns 输出字符串。n 是数字指代输出几个字符
        • %ni 输出整数。n 是数字指代输出几个数字
        • %m.nf 输出浮点数。m 和 n 是数字,指代输出的整数位数和小数位数。如 %8.2f 代表共输出 8 位数,其中 2 位是小数,6 位是整数。
      • 输出格式
        • \a 输出警告声音
        • \b 输出退格键
        • \f 清除屏幕
        • \n 换行
        • \r 回车
        • \t 水平输出 Tab 键
        • \v 垂直输出 Tab 键
    • awk 命令的输出中支持 printprintf 命令
  • awk 字符截取命令
    • awk '条件1{动作1}条件2{动作2}...' 文件名
    • 条件
      • 一般使用关系表达式作为条件
      • x>10 判断变量 x 是否大于 10
      • x>=10 大于等于
      • x<=10 小于等于
    • 动作
      • 格式化输出
      • 流程控制语句
    • 例子
      • awk '{printf $2 "\t" $4 "\n"}' student.txt
      • awk '{print $2 "\t" $4 }' student.txt
      • df -h | awk '{print $1 "\t" $3}'
        • akw 'BEGIN{printf "This is a transcript \n"}{printf $2 "\t" $4 "\n"}' student.txt
        • cat /etc/passwd |grep "/bin/bash" | awk 'BEGIN{FS=":"}{printf $1 "\t" $3 "\n"}'
  • sed 字符替换命令
    • sed 是一个几乎包括在所有 UNIX 平台(包括 Linux)的轻量级编辑器。sed 主要是用来将数据进行选取、替换、删除、新增的命令
    • sed [选项] '[动作]' 文件名
      • 选项
        • -n 一般 sed 命令会把所有数据都输出到屏幕,如果加入此选择则只会把经过 sed 命令处理的行输出到屏幕
        • -e 允许对输入数据应用多条 sed 命令编辑
        • -i 用 sed 的修改结果直接修改读取数据的文件,而不是由屏幕输出
      • 动作
        • a 追加,在当前行后添加一行或多行
        • c 行替换,用 c 后面的字符串替换原数据行
        • i 插入,在当期行前插入一行或多行
        • d 删除,删除指定行
        • p 打印,输出指定的行
        • s 字符串替换,用一个字符串替换另外一个字符串,格式为 “行范围s/旧字符串g”
      • 例子
        • sed '2p' student.txt 查看文件的第二行
        • sed '2,4d' student.txt 表示删除【第2-4行】,但是不改变文件本身
        • sed '2a piaoliangdecxiaoguniang' student.txt 在第2行之后添加字符串,但是不改变字符串本身
        • sed '4c xxwmpg' student.txt 将第二行的整行替换为xxwmpg
        • sed '6s/70/100/g' student.txt 将第7行的所有70全部替换为100,如果不指定行的话会替换所有的指定字符串
        • sed -e 's/fengj//g';s/cang//g' student.txt 同时把fengj和cang替换为空

第3章 字符处理命令

  • sort 排序命令
    • sort [选项] 文件名
      • 选项
        • -f 忽略大小写
        • -n 以数值型进行排序,默认使用字符串型排序
        • -r 反向排序
        • -t 指定分隔符,默认的分隔符是制表符
        • -k n[,m] 按照指定的字段范围排序。从第 n 字段开始,m 字段结束(默认到行尾)
      • 用法
        • sort /etc/passwd 用户信息正向排序
        • sort -r /etc/passwd 用户信息反向排序
        • sort -t ":" -k 3,3 /etc/passwd 指定分隔符是 “:”,用第三字段开头,第三字段结尾排序,就是只用第三字段排序
        • sort -n -t ":" -k 3,3 /etc/passwd 作用同上,但把指定字符串排序改为数字排序
  • wc 统计命令
    • wc [选项] 文件名
      • 选项:
        • -l 只统计行数
        • -w 只统计单词数
        • -m 只统计字符数
      • 用法:
        • wc /etc/passwd
        • wc -l /etc/passwd