shell 正则表达式RE 正则符号拓展源 以及脚本中的正则匹配 递归查找文件内容 sed过滤文件内容

目录

正则表达式

sh 复制代码
# 支持扩展正则表达式,即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\>

拓展元字符

sh 复制代码
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

正则判断数据类型

shell 复制代码
  = {等于}  != {不等于} =~ {匹配}

注意 在脚本中判断某个便令的样式哈
read -p"请输入:" get_var
if [[  $get_var =~ ^[0-9]+$ ]]; then
    echo "变量是数字"
else
    echo "变量不是数字"
fi

# 判断一个数字
^[0-9]+$

# 判断一个浮点数
^[0-9]+\.[0-9]+$

# 匹配数字个数 为11位
^[0-9]{11}$

# 匹配一个域名
^[a-z0-9]+$\.[a-z]$


====================================================================================
# 判断一个数字是不是11位
num=1234567890

if [[  $num =~ ^[0-9]{11}$ ]]; then
    echo "变量是手机号码"
else
    echo "变量不是手机号码"
fi
====================================================================================
# 判断是不是一个域名
num=123dfs45.con:155

if [[  $num =~ ^[a-z0-9]+\.[a-z]+:[0-9]+$ ]]; then
    echo "yes"
else
    echo "no"
fi

递归查找文件内容

sh 复制代码
# -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 文件进行操作

此处仅仅作为一个演示

sh 复制代码
# -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

================================================================================
# 对文件进行替换

## 永久关闭selinux

sed -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
相关推荐
-兮3 个月前
完美解决Ubuntu的MySQL临时文件夹修改调整
linux·mysql·ubuntu·adb·debian·sh
西风凋丶碧树4 个月前
sh脚本笔记2
linux·sh
杨小扬5 个月前
xcode命令行
macos·ios·xcode·sh
半虹7 个月前
Linux实战笔记(五) shell
linux·bash·shell·环境变量·配置文件·sh
白嫖一茶10 个月前
shell 获取主机IP 脚本中使用IP 打印出来IP
服务器·bash·sh
征途黯然.1 年前
Shell命令操作Linux文件系统
linux·服务器·windows·shell·sh
PerCheung1 年前
CentOS系统环境搭建(八)——CentOS7开机自动执行脚本(以MySQL为例)
linux·mysql·centos·脚本·自启动·sh