linux之shell的正则表达式

2023-05-16

一、grep 文本过滤命令

grep命令是一种强大的文本搜索工具,
可以根据用户指定的“模式”对目标文本进行匹配检查,打印匹配到的行;
由正则表达式或者字符及基本文件字符所编写的过滤条件
-i      ##表示不区分匹配条件的大小写
-ni     ##表示不区分匹配条件的大小写并且显示行数
-n  关键字 ##表示并显示含有关键字的行数
-n2 关键字 ##显示关键字的行数和上下两行
grep -A3 关键字  ##显示关键字下面三行 After
grep -B3 关键字  ##显示关键字上面三行 Before
grep ^关键字     ##显示关键字在开头的的内容
grep 关键字$     ##显示关键字在末尾的内容
grep 关键字 文本 -v    ##显示除了关键字的其他内容
egrep=grep -E
扩展正则表达式 grep  -E "bin|lp" passwd
显示passwd文本里含有bin或者lp的内容,这里|也有通道符的意思,所以属于扩展正则表达式,要用grep -E或 egrep 
显示root在中间的内容,这里用两条命令结合实现
grep \<关键字    ##前面有堵墙 前面什么都不能有
grep 关键字\>    ##后面有堵墙
grep \<关键字\>  ##前后都只能是这个关键字
grep  x..y      ##匹配x和y中间有两个字符的内容
grep  x....y
grep  ....y
grep字符匹配次数的设定
-o 唯一匹配
grep -i root passwd    ##-i 不区分大小写 输出含有root的行
grep -in ^root passwd  ##-n 表示显示行号 输出以root开头的行 
grep -i root$ passwd   ##以root结尾的行
grep -i -E "^root|root$" passwd  ##以root开头或以root结尾
grep root passwd | grep -i -E "^root|root$"  ##以root开头或以root结尾
grep root passwd | grep -i -E "^root|root$" -v  ##-v 相反

这里写图片描述

grep -E 'r..t' passwd  
grep -E 'r...t' passwd 
grep -E 't...t' passwd 
grep -E 't*t' passwd   ##txt  tart
grep -E 't..t' passwd   ##txxt

这里写图片描述

ls
vim passwd 
grep ....t passwd     ##gfdsft ->fdsft
grep -E "\<....t" passwd   ##以....t开头的单词  
grep -E "....t\>" passwd   ##以....t的结尾的单词
grep -E "\<....t\>" passwd  ##单词....t
ifconfig eth0
ifconfig eth0 |grep -E "inet"   ##两行
ifconfig eth0 |grep -E "inet\>"  ## 一行

这里写图片描述

grep -E 'xa*y' westos       ##任意个a
grep -E 'xa?y' westos       ##0-1个a
grep -E 'xa+y' westos       ##1+个a
grep -E 'xa{2}y' westos     ##2个a
grep -E 'xa{2,}y' westos    ##最少2个a
grep -E 'xa{,2}y' westos    ##最多2个a
grep -E 'xa{1,2}y' westos   ##1-2个a
grep -E "t(xy){3}t" westos  ##3个a
grep -E "t(xy){3,}t" westos     ##最少三个xy
grep -E "t(xy){4}t" westos  ##4个xy
grep -E "t(xy){0,4}t" westos    ##0-4个xy

这里写图片描述
这里写图片描述
二、sed 行编辑器

用来操作出ASCLL码的文本;
处理时,把当前处理的行存储在临时缓冲区中,称为“模式空间”(Pattern space)可以指定仅仅处理哪些行为;
符合模式条件的处理,不符合模式条件的不予处理,处理完成之后八缓冲区的内容送往屏幕,接着处理下一行,这样不断重复,直到文件末尾。
p  ##显示             d ##删除
a  ##添加             i ##向上添加
c  ##更改             w ##保存
=  ##显示**所在行      r ##合并文件
G  ##

p:显示

cat -n fstab  | sed -n 6p   ##显示第6行
cat -n fstab  | sed -ne '6p;2p' ##显示第2,6行
sed -n '/^#/p' fstab       ##显示以#开头的行
sed -n '/^#/!p' fstab      ##显示不以#开头的行

这里写图片描述
d:删除

sed '5d' fstab  ##删除第五行  
cat -n fstab | sed '5d'        ##删除第五行并显示行号
cat -n fstab | sed '5,7d'      ##删除5-7行
cat -n fstab | sed -e '5d;7d'  ##删除第五和第7行
sed '/^#/d' fstab
sed '/#/d' fstab
sed '/#/!d' fstab

这里写图片描述
这里写图片描述
a:添加

sed '/hello/aworld' westos   ##在hello后行加world
sed '/hello/aworld test' westos  ##在hello后行加world test
sed '/hello/aworld\ntest' westos ##在hello后行加world 后行加test
sed '/123/aworld\ntest' westos 
sed '/^123/aworld\ntest' westos 
sed '/123$/aworld\ntest' westos 

这里写图片描述
a:向上添加

 sed '/123/i456' westos    ##给westos中的123前面添加456

这里写图片描述
c :更改

 sed '/hello/chello westos' westos  ##把westos文件中有hello行换为hello westos 

这里写图片描述
w :保存

sed '/^#/wfile' fstab    ##保存以#开头到file中 
sed '/#/wfile' fstab     ##/#/所有有#的行都保存到file中
cat file 
sed -n '/^#/wfile' fstab  ##不显示结果直接保存

这里写图片描述
这里写图片描述
= :显示**所在行

sed  '/^#/=' fstab   ##显示#所在行号不显示内容
sed  -n '/^#/=' fstab ##显示#所在的行号显示内容

这里写图片描述
r:合并文件

sed '$r westos' fstab    ##合并westos和fstab文件 $表示在最后
sed '1r westos' fstab     ##westos加到fstab文件第一行
sed '/UUID/r westos' fstab   ##将文件westos加到fstab UUID的下一行

这里写图片描述
这里写图片描述
这里写图片描述
练习:
1.
2.编写脚本使得 apache端口可以更改

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

linux之shell的正则表达式 的相关文章

  • 删除 Git 存储库,但保留所有文件

    在我使用 Linux 的过程中的某个时刻 我决定将我的主目录中的所有内容都放入源代码管理中是个好主意 我不是在问这是否是一个好主意 我是在问如何撤销它 删除存储库的原因是我最近安装了 Oh My Zsh 而且我非常喜欢它 问题是我的主目录有
  • 我不明白 execlp() 在 Linux 中如何工作

    过去两天我一直在试图理解execlp 系统调用 但我还在这里 让我直奔主题 The man pageexeclp 将系统调用声明为int execlp const char file const char arg 与描述 execl exe
  • 当 grep "\\" XXFile 我得到“尾随反斜杠”

    现在我想查找是否有包含 字符的行 我试过grep XXFile但它暗示 尾随反斜杠 但当我尝试时grep XXFile没关系 谁能解释一下为什么第一个案例无法运行 谢谢 区别在于 shell 处理反斜杠的方式 当你写的时候 在双引号中 sh
  • Linux:如何设置进程的时区?

    我需要设置在 Linux 机器上启动的各个进程的时区 我尝试设置TZ变量 在本地上下文中 但它不起作用 有没有一种方法可以使用与系统日期不同的系统日期从命令行运行应用程序 这可能听起来很愚蠢 但我需要一种sandbox系统日期将被更改的地方
  • 快速像素绘图库

    我的应用程序以每像素的方式生成 动画 因此我需要有效地绘制它们 我尝试过不同的策略 库 但结果并不令人满意 尤其是在更高分辨率的情况下 这是我尝试过的 SDL 好的 但是慢 OpenGL 像素操作效率低下 xlib 更好 但仍然太慢 svg
  • 在退出脚本之前等待后台进程完成

    在退出脚本 TCL Bash 之前 如何确保所有后台进程已完成执行 我正在考虑将所有后台进程 pid 写入 pid 文件 然后最后 pgrep pidfile 以查看在退出之前是否有任何进程仍在运行 有一些更简单的方法可以做到这一点吗 TC
  • 如何查询X11显示分辨率?

    这似乎是一个简单的问题 但我找不到答案 如何查询 通过 X11 存在哪些监视器及其分辨率 查看显示宏 http tronche com gui x xlib display display macros html and 屏幕宏 http
  • PyQt5 - 无法使用 QVideoWidget 播放视频

    from PyQt5 QtWidgets import from PyQt5 QtMultimedia import from PyQt5 QtMultimediaWidgets import from PyQt5 QtCore impor
  • 为什么我可以在 /proc/pid/maps 输出中看到几个相同的段?

    测试在32位Linux上进行 代码如下 int foo int a int b int c a b return c int main int e 0 int d foo 1 2 printf d n d scanf d e return
  • 无法在 Perl 中找到 DBI.pm 模块

    我使用的是 CentOS 并且已经安装了 Perl 5 20 并且默认情况下存在 Perl 5 10 我正在使用 Perl 5 20 版本来执行 Perl 代码 我尝试使用 DBI 模块并收到此错误 root localhost perl
  • Python 脚本作为 Linux 服务/守护进程

    Hallo 我试图让 python 脚本作为服务 守护进程 在 ubuntu linux 上运行 网络上存在多种解决方案 例如 http pypi python org pypi python daemon http pypi python
  • Awk - 计算两个文件之间的每个唯一值和匹配值

    我有两个文件 首先 我尝试获取第 4 列中每个唯一字段的计数 然后匹配第二个文件的第二列中的唯一字段值 File1 第 4 列的每个唯一值和 File2 第 2 列包含我需要在两个文件之间匹配的值 所以本质上 我试图 gt 如果 file2
  • 嵌入式linux编写AT命令

    我在向 GSM 模块写入 AT 命令时遇到问题 当我使用 minicom b 115200 D dev ttySP0 term vt100 时它工作完美 但我不知道如何在 C 代码中做同样的事情 我没有收到任何错误 但模块对命令没有反应 有
  • shell中如何从数组中随机选择一个项目

    我正在 Shell 脚本中创建一个机器人 Array with expressions expressions Ploink Poink I Need Oil Some Bytes are Missing Poink Poink Piiii
  • Linux中使用管道进行进程间通信

    我已经编写了在 linux 中写入数字以进行管道传输的代码 如下所示 但显示错误 任何人都可以帮助我解决这个问题 基本上该程序的问题陈述如下 一个程序将打开一个管道 向管道写入一个数字 其他程序将打开同一管道 读取数字并打印它们 关闭两个管
  • java Runtime.getRunTime().exec 和通配符?

    我正在尝试使用删除垃圾文件 Process p Runtime getRuntime exec 只要我不使用通配符 它 就可以正常工作 即 Process p Runtime getRuntime exec bin rm f specifi
  • 如何将后台作业的输出分配给 bash 变量?

    我想在 bash 中运行后台作业并将其结果分配给一个变量 我不喜欢使用临时文件 并且希望同时运行多个类似的后台任务 root root var echo hello world root root echo var hello world
  • 配置:错误:无法运行C编译的程序

    我正在尝试使用 Debian Wheezy 操作系统在我的 Raspberry Pi 上安装不同的软件 当我运行尝试配置软件时 我尝试安装我得到此输出 checking for C compiler default output file
  • npm 运行如何工作?

    当我打字时会发生什么npm run
  • 如何让 STDOUT 和 STDERR 都转到终端和日志文件?

    我有一个脚本 将由非技术用户交互式运行 该脚本将状态更新写入 STDOUT 以便用户可以确定脚本运行正常 我希望将Stdout和STDERR重定向到终端 以便用户可以看到脚本正在工作 并查看是否存在问题 我还希望将两个流都重定向到日志文件

随机推荐

  • Kotlin JSON格式解析

    Kotlin JSON解析 开发环境就是下面这个 一 添加依赖 在build gradle kts文件中添加下面依赖 dependencies span class token punctuation span span class tok
  • mysql 5.7版本查询一条数据JSON字段拆分多条

    场景 xff1a 查询出来一条数据 xff0c 其中fee items字段为json数组 xff0c 现在要把json数组拆分 xff0c 如果有多条 xff0c 则展示多行数据 xff0c 列转行 表中的数据 字段 fee items 是
  • mysql 字段json行转列

    SET FOREIGN KEY CHECKS 61 0 Table structure for keyid DROP TABLE IF EXISTS 96 keyid 96 CREATE TABLE 96 keyid 96 96 id 96
  • VisualStudio2019+PyQt5

    进入VS修改 把除了默认框选之外的 34 本机开发工具 34 选上 不选的话感觉也没什么运行上的影响 但是 import sys from PyQt5 import QtWidgets 导入PyQt5部件 导入PyQt5没问题 但是却会报一
  • 【Linux】Linux文件系统管理——文件系统常用命令

    文章目录 一 df命令 du命令 fsck命令 dumpfs命令1 1 统计文件系统信息df1 2 统计目录或文件大小du1 3 df命令和du命令的区别1 3 文件系统修复明亮fsck1 4 显示磁盘状态命令dumpe2fs 二 挂载命令
  • vue3 setup lang=“ts“ defineExpose

    vue3 setup lang 61 ts defineExpose Vue 96 span class token tag span class token tag span class token punctuation lt span
  • 关于《软件设计师教程 第5版》UML构件图两类接口描述错误的问题

    如图所示 xff0c 在备考软件设计师时 xff0c 有遇到关于 构件图 的题目 xff0c 官方给的 xff08 是供接口 xff0c O 是需接口 xff0c 就像官方教程上展示的这样 但是发现有其他人说 xff08 是需接口 xff0
  • 统计字符串中每个字母的个数 C语言

    int main char str 100 int count 26 61 0 i 61 0 printf 34 请输入字符串 n 34 gets str while str i 61 39 0 39 if str i gt 61 39 a
  • 51单片机学习笔记5 -- 外部中断

    外部中断 1 外部中断概念2 引脚功能复用3 中断号和中断类型4 外部中断编程 1 外部中断概念 外部中断是单片机实时地处理外部事件的一种内部机制 当某种外部事件发生时 xff0c 单片机的中断系统将迫使CPU暂停正在执行的程序 xff0c
  • k8s部署redis集群(方案1)

    目录 一 创建configmap 二 创建redis集群 三 集群初始化 四 验证集群省略 补充 1 如果整个 redis 集群的 pod 全部都挂掉了 xff0c pod自动拉起后 xff0c 集群不可用 xff0c 需要重建集群 2 重
  • QT5 实现UDP和串口通信

    QT5实现UDP和串口通信 前言 硬件平台 xff1a X86工控机 温湿度模块 xff1b 使用QT5编程实现X86工控机 xff08 客户端 xff09 与网络调试助手UDP通信 xff0c 同时X86工控机与温湿度模块实现串口通信 通
  • STM32单片机DMA串口数据收发

    前言 本实验是在原子哥的DMA实验的基础上进行修改 xff0c 添加了DMA串口数据接收功能 接收到指定数据时LED1的状态翻转 内附源码下载链接 xff1a 添加链接描述 注意 xff1a 在编写DMA串口数据收发时 xff0c DMA发
  • RT-Thread studio 添加CAN通信功能

    前言 最近在学习rt thread xff0c 在学习到CAN通信时遇到了一些问题 xff0c 首先就是如何注册CAN设备 发现在rt thread中 xff0c CAN 与其他的设备注册不一样 xff0c rt thread不会把CAN驱
  • 教你如何一步一步制作自己的PCB个人LOGO

    做了这么多年的硬件了 xff0c 也画了好多电路板 xff0c 昨天心血来潮决定以后在绘制电路板上添加上自己的LOGO 目录 一 LOGO 设计 二 LOGO修改 三 导入AD 一 LOGO 设计 于是开始制作LOGO图案 xff0c 由于
  • Visual Studio v141 生成工具 报错

    使用Visual Studio 2019的时候 xff0c 兼容旧有版本的VS出现如下报错 xff1a 错误 MSB8020 无法找到 Visual Studio 2017 的生成工具 平台工具集 61 v141 若要使用 v141 生成工
  • 一次多线程优化读取文件的实战

    需求描述 xff1a 商户每天会定时将文件传到我们的sftp服务器 xff0c 我们需要对文件解析落库等操作 方案A xff1a 起初的设计是将文件下载到本地 xff0c 读取整个文件 xff0c 落库等一系列处理 方案A的设计本来是没问题
  • VisualStudio突然无法启动显示log文件Error解决方法

    visual studio 启动报 activityLog xml文件 错误 1 在安装目录里面找到 devenv exe 这个文件的所在位置C Program FilesMicrosoft Visual Studio 10 0Common
  • 【笔记】Java实现通过本地浏览器打开UClient访问NC服务,如果失败,则打开IE浏览器访问NC Web服务

    span class token keyword package span span class token namespace nc span class token punctuation span baseapp span class
  • 将VMware虚拟机移到其它磁盘(C盘->D盘)

    1 打开我们的VMware xff0c 然后鼠标放在你的虚拟机上 xff0c 可以看到你的虚拟机所在的路径 xff0c 图中在C盘 xff1a 2 将虚拟机移除 xff0c 鼠标放在虚拟机上 xff0c 右键选择移除 弹出确认框 xff0c
  • linux之shell的正则表达式

    一 grep 文本过滤命令 span class hljs keyword grep span 命令是一种强大的文本搜索工具 xff0c 可以根据用户指定的 模式 对目标文本进行匹配检查 xff0c 打印匹配到的行 xff1b 由正则表达式