目录
- 正则表达式
- 拓展元字符
- 正则判断数据类型
- 递归查找文件内容
- sed 的使用
正则表达式
# 支持扩展正则表达式,即o{3}表示匹配3个字母"o"。
grep -E "o{3}" /etc/passwd
# 指定使用Perl兼容的正则表达式,即\s表示匹配一个空格。
grep -P "\s" /etc/passwd
# \d表示匹配一个数字字符
grep -P "\d" /etc/passwd================================================================================
#格式
grep {^{内容}} {文件路径}# 基本元字符================================================================================# 行首定位符
^{内容}# 行尾定位符
{内容}$# 点可以表示一个字符
{a.b} 可以匹配到 abc# 前导字符 零到多次 这里是就是匹配a 零次 或者多次
{a*b} 可以匹配到 abc# 中间任意字符
{a.*b}# 按照范围去匹配
[afl]o ao fo lo# 匹配到一个字符 这个字符是小写字母 或者 数字
[a-z0-9]# 匹配到多个字符 这个字母是大写字符
[A-Z]# 匹配到五个大写字母
[A-Z]{5}# 尖号 在这里是取反的意思
[^afl]o# 词首定位符
\<
\<love# 词尾定位符
\>
love\>
拓展元字符
grep -E | egrep 两个命令都支持扩展元字符# 匹配一个任意字符
.# 匹配 零个或多个前导字符
*# 匹配多个任意字符
.*
egrep r.*t /etc/passwd# 匹配一个 或者多个签到多个
?
egrep va? /etc/passwd# 匹配两个关键词
|
egrep 'root|bash' /etc/passwd# 过滤组合
egrep a(b|c|d)
只能过滤出来 ab ac ad# 过滤某个字符串重复 次数
egrep o{2} /etc/passwd# 过滤某个字符串重复 次数
x{m,n} 字符x重复m到n次# 字符次数控制
x{m} 字符x重复m次
o{5}
o{,3} 字符最多出现3次
x{m,} 字符x重复至少m次
o{5,} 字符最少出现5次# -v可以取反
grep -v "\<[A-Z]" a.tx
正则判断数据类型
= {等于} != {不等于} =~ {匹配}注意 在脚本中判断某个便令的样式哈
read -p"请输入:" get_var
if [[ $get_var =~ ^[0-9]+$ ]]; thenecho "变量是数字"
elseecho "变量不是数字"
fi# 判断一个数字
^[0-9]+$# 判断一个浮点数
^[0-9]+\.[0-9]+$# 匹配数字个数 为11位
^[0-9]{11}$# 匹配一个域名
^[a-z0-9]+$\.[a-z]$====================================================================================
# 判断一个数字是不是11位
num=1234567890if [[ $num =~ ^[0-9]{11}$ ]]; thenecho "变量是手机号码"
elseecho "变量不是手机号码"
fi
====================================================================================
# 判断是不是一个域名
num=123dfs45.con:155if [[ $num =~ ^[a-z0-9]+\.[a-z]+:[0-9]+$ ]]; thenecho "yes"
elseecho "no"
fi
递归查找文件内容
# -r 选项表示递归搜索 可以返回 文件路径和内容grep -r 'root' /etc/ # -o 选项表示只输出匹配行的内容,即不包含文件名和行号grep -r -o 'root' /etc/# 把正则符号当作 字符串查询grep -F '.*' /etc/ ## ps 查找进程的 取消grep 取反
## 这样的作用是 在使用grep 查询某个进程的时候 可以 不看到grep 这个进程ps aux | grep ssh | grep -v "grep"
sed 的使用
在工作环境中不要对 passwd 文件进行操作
此处仅仅作为一个演示
# -i可以对文件直接替换(-i 一定会替换)
sed -i "s/root/ROOT/g" /etc/passwd# -r 是扩展元字符
sed -r "s/root/p" /etc/passwd# -n 加上之后,只显示 查找的内容
sed -n "/root/p" /etc/passwd# 对root 进行替换
sed "s/root/ROOT/g" /etc/passwd# /root/d 删除带有root 的行
sed '/root/d' /etc/passwd# 把带有root 的行 复制打印
sed '/root/p' /etc/passwd# -n 会只输出 带有root 的行
sed -n '/root/p' /etc/passwd# 对内容继续替换
sed "s/root/ROOT/g" /etc/passwd================================================================================
# 对文件进行替换## 永久关闭selinuxsed -r -i 's/^SELINUX=[a-z]+/SELINUX=disabled/' /etc/selinux/config===============================================================================
'5d' 删除某行
'5p' 复制某行 带上参数 -n 可以只打印某几行
'^' 可以替换为一个内容 后边加上一个/n 就可以作为一个第一个行来用了passwd 是一个复制过来的文件# 删除 某行## 删除 第五行
sed "5d" passwd# 删除 一到五行
sed "1,5d" passwd# 删除 1 3 5 行
sed "1d;3d;5d" passwd# 删除奇数行
sed "1~2d" passwd# 删除偶数数行
sed "2~2d" passwd===============================================================================
## 在某个内容 追加
i 是在上边插入 a 是在 后边追加sed "/\[mysqld\]/a\innodb_buffer-pol_size = 128 M" /etc/my.cnf
\[mysqld\] 在[mysqld] 内容后追加
/a 是在下边追加# 在某行下边添加sed '8a hahaha' passwd# 在某行上边添加
sed '10i lalala' passwd# 删除 注释和空行
sed -r '/#/d ; /^$/d' {文件路径}# 把10行以后的末尾加上cloud:
sed '10,$ s/$/cloud/' passwd## 10,$ 表示 10行到最后## s/$/cloud/ 表示把行尾替换为 cloud# 显示包含oo字符串的行到包含gin字符串的行:
sed -n '/oo/,/gin/p' passwd# 在文件第一行添加 11111 1s表示对第一行 进行操作。
sed '1s/^/11111\n/' passwd# 删除10到20行最后一个字符:
sed -i '10,20s/.$//' passwd# 打印第10 行到结尾
sed -i '10,$p' passwd