一.简介
shell中正则表达式用于对文本的处理,如匹配、查找和替换,通常会结合grep、sed和awk一起使用。
二.正则表达式的模式
用法简介:
普通字符
字符 | 字面意思 | 如匹配abc egrep "abc" |
特殊字符
. | 任意一个字符 | 如匹配a后面的任一字符 grep 'a.' |
* | *前的字符 有0个或多个 | 如匹配至少0或多个字母a grep 'a*' |
.* | 匹配所有 贪婪匹配 | 如匹配a到8之间所有字符 grep 'a.*8' |
+ | +前的字符 有1个或多个 | 如匹配至少一个或多个字母a egrep 'a+' |
? | ?前的字符 有0个或1个 | 如匹配0个或一个字母a egrep 'a?' |
| | 或|前后的字符 | 如匹配a或者b egrep 'a|b' |
\ | 转义字符 |
字符类
[] | []括号内的任一字符 | 如匹配a或b或c egrep '[abc]' |
[^ ] | []括号内的以外字符 | 如匹配a或b或c以外的字符 egrep '[^abc]' |
() | ()括号内整体 | 如匹配123整体组和的字符 egrep '(123)' |
[[:space:]] | 匹配空格(空格/制表/换行) | |
[[:blank:]] | 匹配空白字符(空格/制表) |
元字符
\d | 匹配数字 | 如匹配数字 等同于egrep '[0-9]' |
\D | 匹配非数字 | 如匹配非数字 等同于egrep '^[0-9]' |
\w | 匹配一个单词字符(字母/数字/下划线) | 等同于[a-Z0-9_] |
\W | 匹配一个非单词字符 | 等同于[^a-Z0-9_] |
\s | 匹配一个空白字符(空格/制表/换行) | |
\S | 匹配一个非空白字符 |
量词
{n} | 匹配前面的字符n次 | |
{n,} | 匹配前面的字符至少n次 | |
{n-m} | 匹配前面的字符最少n次,最多m次 |
边界字符
^ | 匹配字符串的开头 | 如去掉以#开头的 grep -v ^# |
$ | 匹配字符串的结尾 | 如去掉以a结尾的 grep -v a$ |
^$ | 匹配空行 | |
\b | 单词的边界 | |
\B | 非单词边界 |
修饰符
i | ignore 不区分大小写 | 如不区分大小写匹配字母a grep -i a |
g | global 全局匹配 | |
s | .中包含换行\n | |
m | multi line多行匹配 |
二.shell
1.逻辑运算与算数运算
-eq | 等于 | 如果$n等于1 [ $n -eq 1 ] |
-ne | 不等于 != | 如果$n不等于1 [ $n -ne 1 ] |
-lt | 小于 | 如果$n小于1 [ $n -lt 1 ] |
-gt | 大于 | 如果$n大于1 [ $n -gt 1 ] |
== | 恒等于 =为赋值 | 如果$n恒等于1 [ $n == 1 ] |
&& | 且 | &&前后的命令,前面执行成功,才执行后面的 |
|| | 或 | || 前后的命令,前后的未执行成功,才执行后面的 |
+ | 加 | |
- | 减 | |
* | 乘 | |
/ | 除 | 保留2位小数点 scale=2 echo "scale=2;100/9" | bc |
% | 取余 | echo "9%5" | bc 结果为4 |
2.字符串与文件运算
-n | 不为0 | [ -n $a ] |
-z | 为0 | [ -z $a ] |
-f | 文件存在 | [ -f /tmp/text ] |
-d | 目录存在 | [ -d /tmp/mysql ] |
-e | 文件目录存在 | [ -e /tmp/mysql ] |
2.变量与引用
变量赋值
var=value | 局部变量,次脚本内部有效 | |
export var=value | 全局变量,所有程序或脚本可用 |
引号类型
' ' | 单引号 所见即所得 原封不动 | |
"" | 双引号 变量允许引入,其他不变 | |
` ` | 反单引号 执行引号内的命令,推荐使用$() |
3.$的几种用法
1-n | shell的第几个参数 | |
$1-$n | 添加到shell各参数的值 | |
$0 | shell脚本的文件名 | |
$# | 参数的个数 | |
$? | 命令执行的状态,0正确,非0出错 | |
$$ | 脚本运行的当前进程ID | |
$! | shell最后运行的 后台进程PID | |
$* | 所有参数列,加“”后,所有参数为一个整体 | |
$@ | 所有参数列,加“”后,所有参数独立,常用这种 | |
$- | shell使用的当前选项 | |
${#n} | 第n个参数的长度 | 如第一个参数的长度不等于8 [ ${#1} -ne 8 ] |
4.常用条件控制语句与函数
选择结构
if-else
case 多选择和场景
循环结构
for循环
while 循环
函数
5.传参和用户交互read -p
三.四剑客
grep常用
sed常用
awk常用
cut常用