正则表达式
正则表达式是通过正则表达式引擎用特殊字符匹配符合条件的字符,定义了过滤数据的模式模板,模式由标准文本字符和特殊字符组成。正则表达式引擎是解释正则表达式模式并使用这些模式进行文件匹配的底层软件。POSIX基本正则表达式(BRE)引擎和POSIX扩展正则表达式(ERE)引擎是Linux中两种流行的正则表达式引擎。POSIX,全称Portable operating system interface for unix,即可移植性操作系统接口,定义了UNIX操作系统支持的功能,由一系列规范组成,POSIX正则表达式是关于正则表达式的规范。正则表达式通常与grep、cut、sed、awk等字符提取命令搭配使用。
基础正则表达式
RE字符 | 说明 |
^ | 匹配行首 |
$ | 匹配行尾 |
. | 匹配换行符外的任意一个字符 |
\ | 转义符,去除特殊符号的特殊意义 |
* | 前一个字符匹配0次或任意多次 |
[ ] | 匹配[ ]中指定的一个字符 |
[ - ] | 匹配[ - ]中指定范围的一个字符 |
[^ ] | 匹配 [ ]字符外的任意一个字符 |
\{n\} | 前面的字符出现n次 |
\{n,\} | 前面的字符出现不小于n次 |
\{n,m\} | 前面的字符最少出现n次,最多出现m次 |
字符提取命令
grep命令——
语法:grep选项 匹配字符串 文件
选项:-i 不区分大小写
-v 排除指定字符串所在行
-n 显示行号
-i 忽略大小写
-s 不显示错误信息
-c 统计匹配字符串的行数
cut命令——
语法:cut [选项] 文件名
选项:-f 提取第几列
-d 按照指定分隔符(除空格符)分割列
awk命令——
语法:awk 'BEGIN{ commands } 条件类型1{动作1} 条件类型2{动作2}... END{ commands }' filename
内置变量:{FS = " "} 字段分隔符(默认是制表符和空格)
格式化打印语法:printf '输出类型输出格式' 输出内容
输出类型:%ns 输出字符串
%ni 输出整数
%m.nf 输出浮点数
输出格式:\n 换行
\r 回车
\t 水平制表符
sed命令——
语法:sed 选项 '动作' filename
选项:-n 将sed命令处理的数据行输出
-i 将sed修改结果直接写入文件
-e 在sed命令行执行多个命令,命令之间用分号隔开
动作:p 输出指定行
d 删除指定行
a 在当前行后追加一行或多行数据,多行数据用"\"代表数据未结束
c 行替换
i 在当前行前插入一行或多行数据
s 字符串替换,格式"行范围s/旧字符串/新字符串/g"
字符处理命令
排序命令——
语法:sort 选项 文件名
选项:-f 忽略大小写
-u 去除重复行
-r 降序排序
-n 以数值进行排序
-t 指定分隔符(默认制表符)
-k 指定排序字段
-o 将排序结果输出到原文件
统计字符命令——
语法:wc 选项 文件名
选项:-l 统计行数
-w 统计词数
-m 统计字符数
条件判断
1.两种判断格式
语法1:test condition
语法2:[ condition ]
需注意语法2左括号右侧和右括号左侧各加一个空格,否则会报错。
2.测试选项
test命令可以判断3类条件:数值比较、字符串比较及文件比较。
数值比较——
比较 | 作用 |
n1 -eq n2 | 判断n1是否与n2相等 |
n1 -ne n2 | 判断n1是否与n2不相等 |
n1 -gt n2 | 判断n1是否大于n2 |
n1 -ge n2 | 判断n1是否大于等于n2 |
n1 -lt n2 | 判断n1是否小于n2 |
n1 -le n2 | 判断n1是否小于等于n2 |
字符串比较——
比较 | 作用 |
str1 = str2 | 判断str1是否和str2相同 |
str1 != str2 | 判断str1是否和str2不同 |
-z str | 判断str的长度是否为空 |
-n str | 判断str的长度是否非空 |
文件比较——
比较 | 作用 |
-d | 判断文件是否存在且是一个目录 |
-f | 判断文件是否存在且是一个文件 |
-e | 判断文件是否存在 |
-s | 判断文件是否存在且非空 |
-r | 判断文件是否存在且可读 |
-w | 判断文件是否存在且可写 |
-x | 判断文件是否存在且可执行 |
file1 -nt file2 | 判断file1的修改时间是否比file2新 |
file1 -ot file2 | 判断file1的修改时间是否比file2旧 |
file1 -ef file2 | 判断file1的inode是否和file2一致 |
条件判断式(结构化命令)
1.if语句
单分支if条件判断式——
if [ 条件判断式 ]; then
commands
fi
或
if [ 条件判断式 ]
then
commands
fi
双分支if条件判断式——
if [ 条件判断式 ]
then
commands
else
commands
fi
多分支if条件判断式——
if [ 条件判断式1 ]
then
commands
elif [条件判断式2 ]
then
commands
......
else
commands
fi
2.case判断语句
case $变量名 in
"值1")
commands1
;;
"值2")
commands2
;;
......
*)
default commands
;;
esac
备注:case语句只能判断一个变量的值
循环判断(结构化命令)
1.for循环
语法1——
for 变量 in 值1 值2 值3 ...
do
commands
done
语法2——
for ((初始值;循环条件;变量变化))
do
commands
done
2.while循环
while [ 条件判断式 ]
do
commands
done
3.unitl循环
until [ 条件判断式 ]
do
commands
done
备注:循环条件成立,停止循环.