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

目录

  • 正则表达式
  • 拓展元字符
  • 正则判断数据类型
  • 递归查找文件内容
  • 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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/603163.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

python协程asyncio的应用,async,await,loop

关于协程&#xff0c;asyncio&#xff0c;async&#xff0c;await&#xff0c;loop的概念&#xff0c;参照上一篇文章可迭代对象&#xff0c;迭代器&#xff0c;生成器&#xff0c;协程-CSDN博客 上一章我们详细的讲解了上述各个名词的概念&#xff0c;但是这些东西实际上该怎…

mybatisPlus CodeGenerator 代码生成

在 test 目录下新建 CodeGenerator 类&#xff0c;用于 mybatis-plus 自动生成 java 代码 package com.edward;import com.baomidou.mybatisplus.generator.FastAutoGenerator; import com.baomidou.mybatisplus.generator.config.OutputFile; import com.baomidou.mybatisplu…

【linux】Ubuntu 22.04.3 LTS截屏

一、快捷键 交互式录屏 ShiftCtrltAltR 交互式截图 Print 对窗口进行截图 AltPrint 截图 ShiftPrint 快捷键可能取决于使用的桌面环境和个人的键盘快捷键设置。如果上述快捷键不起作用&#xff0c;可能需要检查系统设置中的键盘快捷键部分&#xff0c;以了解系统中截图的…

Hive精选10道面试题

1.Hive内部表和外部表的区别&#xff1f; 内部表的数据由Hive管理&#xff0c;外部表的数据不由Hive管理。 在Hive中删除内部表后&#xff0c;不仅会删除元数据还会删除存储数据&#xff0c; 在Hive中删除外部表后&#xff0c;只会删除元数据但不会删除存储数据。 内部表一旦…

【大数据】Zookeeper 数据写入与分布式锁

Zookeeper 数据写入与分布式锁 1.数据是怎么写入的2.基于 Zookeeper 实现分布式锁 1.数据是怎么写入的 无论是 Zookeeper 自带的客户端 zkCli.sh&#xff0c;还是使用 Python&#xff08;或者其它语言&#xff09;实现的客户端&#xff0c;本质上都是连接至集群&#xff0c;然…

Redis 键中冒号的用途是什么?可以使匹配查询更快吗?

Redis 键中冒号的用途是什么在Redis中&#xff0c;冒号&#xff08;:&#xff09;用作键的分隔符&#xff0c;它的主要作用是创建层次结构和命名空间。通过在键中使用冒号&#xff0c;可以将键分为多个部分&#xff0c;从而更好地组织和管理数据。 以下是冒号在Redis键中的用途…

Linux - Linux文件、目录、磁盘模式的知识点

概述 本系列博客一共4篇&#xff0c;是对Linux系统知识的查漏补缺&#xff0c;Linux文件、目录、磁盘模式的一次扫盲知识点&#xff0c;下一篇学习shell的知识点。 Linux文件权限与目录配置 1.修改文件属性与权限 以前对于文件的权限总是记不住&#xff0c;也记不清给什么权…

IMS基本架构

IP Multimedia Core Network Subsystem (IMS)商用已久&#xff0c;相对于CS domain的语音方案&#xff0c;IMS则是基于IETF定义的会话控制功能与多媒体传输功能通过IP-CAN实现的 全IP完整语音解决方案。 IMS能为无线和有线用户实现语音、视频、消息、数据等服务。便于运营商通过…

redis复习笔记03(小滴课堂)

Redis6常见数据结构概览 0代表存在&#xff0c;1代表不存在。 1表示删除成功&#xff0c;0表示失败。 查看类型&#xff0c;默认string类型。 也可以设置set类型。 list类型。 查看key的过期时间&#xff1a; Redis6数据结构之String类型介绍和应用场景 批量设置&#xff1a; …

AI与5G、IDC等成为数字经济的重要基础设施

AI与5G、IDC等已经成为数字经济的重要基础设施&#xff0c;它们的影响和作用不容忽视。随着技术的迅速发展&#xff0c;AI在各行各业都得到了广泛应用&#xff0c;并成为数字经济的核心驱动力之一。 首先&#xff0c;AI的兴起为数字经济带来了巨大的机遇。AI技术可以帮助企业从…

LiveSIPB流媒体国网B接口功能-国网B接口服务安装使用说明

LiveSIPB 国网B接口服务安装使用说明 1、服务说明1.1、安装包说明1.2、国网B接口信令服务1.3、国网B接口流媒体服务1.4、配置信令服务(LiveCMS)1.5、配置流媒体服务(LiveSMS) 2、服务运行2.1、Windows2.2、Linux 3、配置设备接入3.1、海康STATE_GRID接入示例 4、平台使用4.1、管…

【HarmonyOS】装饰器下的状态管理与页面路由跳转实现

从今天开始&#xff0c;博主将开设一门新的专栏用来讲解市面上比较热门的技术 “鸿蒙开发”&#xff0c;对于刚接触这项技术的小伙伴在学习鸿蒙开发之前&#xff0c;有必要先了解一下鸿蒙&#xff0c;从你的角度来讲&#xff0c;你认为什么是鸿蒙呢&#xff1f;它出现的意义又是…

小白入门基础 - Restful

一&#xff1a;REST与RESTful&#xff1a; REST&#xff1a;表现层状态转移&#xff0c;资源在网络中以某种形式进行状态转移。 RESTful是基于REST理念的一套开发风格&#xff0c;是具体的开发规则。 服务器端只返回数据&#xff0c;以json或者xml的格式。 RESTful开发规范&a…

「HDLBits题解」Andgate

本专栏的目的是分享可以通过HDLBits仿真的Verilog代码 以提供参考 各位可同时参考我的代码和官方题解代码 或许会有所收益 题目链接&#xff1a;Andgate - HDLBits module top_module( input a, input b, output out );assign out a & b ; endmodule

八大算法排序@归并排序(C语言版本)

目录 归并排序概念算法思想第一步第二步第三步 算法步骤代码实现代码1代码优化 时间复杂度空间复杂度特性总结 归并排序 概念 归并排序&#xff08;Merge Sort&#xff09;是一种基于分治策略的经典排序算法。它的基本思想是将待排序的数组划分成两个子数组&#xff0c;分别对…

17.Linux Shell输入输出流管理

文章目录 Linux Shell输入输出流管理1)标准文件描述符2)脚本中重定向输出临时重定向永久重定向自定义输出重定向 3)重定向输入4)支持读写的文件描述符5)关闭文件描述符6) 列出打开的文件描述符及关闭文件描述符7)输出同时发送到显示器和日志文件 欢迎访问个人网络日志&#x1f…

大模型实战笔记02——大模型demo

大模型实战笔记02——大模型demo 1、大模型及InternLM模型介绍 2、InternLM-Chat-7B智能对话Demo 3、Lagent智能体工具调用Demo 4、浦语灵笔图文创作理解Demo 5、通用环境配置 注 笔记图片均为视频截图 笔记课程视频地址&#xff1a;https://www.bilibili.com/video/BV1Ci4y1…

基于 IP 多播的网络会议程序(2024)

1.题目描述 局域网 IP 多播程序&#xff0c;设计一个图形界面的网络会议程序&#xff08;实现文本多播方式即可&#xff09;。 2.演示Demo 3.参考代码 广播发送代码 //服务端 #include <winsock2.h> #include <iostream> #include <list>#pragma comment(l…

顶顶通呼叫中心中间件通过队列外呼拨打另一个sip并且放音(mod_cti基于FreeSWITCH)

介绍 顶顶通呼叫中心中间件通过队列外呼拨打另一个sip并且放音 一、添加acl 打开ccadmin->点击配置文件->点击acl.conf->在</list>后面添加一条图中的信息->muqi是我自己设置的名字你们可以修改为自己需要的名字->添加好了点击提交XML->在运维调试点…

如何理解链接(Linking)这一编译过程中的步骤

在理解链接&#xff08;Linking&#xff09;这一编译过程中的步骤之前&#xff0c;有必要了解编译器的整体工作流程。编译器通常经历以下几个阶段&#xff1a; 预处理&#xff08;Preprocessing&#xff09;&#xff1a;处理源代码文件中的预处理指令&#xff0c;如 #include 指…