第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 ":"
- -f 列号:提取第几列
- 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
命令的输出中支持print
和printf
命令
- 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
将第二行的整行替换为xxwmpgsed '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
- 选项: