当前位置: 首页 > news >正文

正则表达式 —— Sed

Sed

Sed 类似于vim就是一个文本编辑器,按行来进行编辑和排序
Sed的原理:读取,执行,显示

读取:读取文本内容之后,读取到的内容存放到临时的缓冲区—模式空间

执行:在模式空间,根据读取的文本内容,按行执行,除非指定行号,否则会遍历执行,依次执行,从上往下执行

显示:执行完之后,把执行结果打印,如果要改变生效,模式空间被修改的内容会写入到指定的文件中。只是操作,但是不最终写入文件,只展示结果,展示玩之后,模式空间的数据会立即删除。

*面  Sed文本内容处理工具

如文件过大怎么办:

首先split -l 或 split -b 进行切割

cat  文件名  |  sed  进行处理

Sed仅适用于中型文件,大型文件还是先分割

Sed

常用选项

sed  -e  '操作'  文件1  |  -e  '操作'  文件2

只对一个文件操作,可以不加 -e

  • -e:条件操作选项
  • -f:指定脚本文件来处理输入的文件内容,把命令写在脚本里,用脚本里的命令来处理第二个文件里面的内容
  • -i:立即生效,慎用
  • -n:显示script处理之后的内(可禁止默认输出)

常用操作符

  • s:替换指定的字符
  • a:增加,在当前行的下面插入指定内容(操作符要用单引号引起来)
  • d:删除指定的行
  • i:增加,在当前行的上面插入新的内容
  • c:替换整行(用的最多)
  • y:替换字符,但是替换前后的字符长度必须一致
  • p:打印
  • r:使用扩展正则

Sed核心作用就是改,删,增        Sed查功能没有Grep强大

sed  -n  'p'  ky30.txt  可以显示一行      

sed  -n  '='  ky30.txt  只输出行号   

sed  -n  'n=;p'  ky30.txt   既显示行号也显示内容

Sed  查找过滤

文本过滤模式:对包含指定字符串的内容进行打印    

sed  -n  '/o/p'  ky30.txt    所有包含o的行会全部打印

运用基础正则表达式进行打印 

sed  -n  '/^root/p'  /etc/passwd   打印以root为开头的行

sed  -n  '/bash$/p'  /etc/passwd   打印以bash为结尾的行

用拓展正则:sed  -r  -n  ' '   /etc/passwd

sed  -r  -n  '/(99:){2}/p'  /etc/passwd       (99:) :分组   {2}:出现两次  p:打印

打印包含两个99的所在行

在/etc/passwd 中过滤出要么是root开头,要么是以bash结尾的所在行

sed  -r  -n  '/^root | bash$p'  /etc/passwd

Sed  删除

指定行号进行删除

sed  -n  '3d:p'  ky30.txt    删除第三行并打印

sed  -n  '1d;3d;p'  ky30.txt  删除第一行和第三行并打印

匹配字符串内容删除

sed  '/o/d'  ky30.txt   把包含o的内容删除

sed  '/big/d'  ky30.txt   把包含big的内容删除

sed  '/big/!d'  ky30.txt  把除了big的行都删除

sed  '/one/,/six/d'  test.txt  把包含one到six的行都删除并打印剩余行

删除空行

sed  '/^$/d'  ky30.txt  

* 面  免交互删除内容

怎么样不进入文件就能删除文件内的内容,即免交互删除

方法一:sed  -i  'd'  文件名 

方法二:cat  /dev/null  >  文件名

Sed 替换

  • s:替换字符串      
  • c:整行替换
  • y:单字符替换,注意替换和被替换的两个字符长度要保持一致
  • l&:转换成小写的特殊符号,在使用时需要转义符 \

  • u&:转换成大写的特殊符号

  • g:全部替换,如果不加,只会更改首位字符

  • y:单字符替换  sed  'y/12/34/'  ky30.txt      y用的较少

例:

sed  -n  's/root/test/p'  /etc/passwd  只替换当前行的第一个root

sed  -n  's/root/test/2p'  /etc/passwd  替换当前行两个root

sed  -n  's/root/test/gp'  /etc/passwd  把所有root都替换为test

把以root开头的行注释掉

sed  -n  '/^root/  s/^/#/p'  /etc/passwd

字母字符大小写替换

小写替换成大写   sed  's/[a-z]/\u&/g'  ky30.txt

大写替换小写       sed  's/[A-Z]/\l&\g'   ky30.txt

整行替换

sed  '/abc/c  def '  ky30.txt   把abc替换成def

*面  查看11.30到12点的日志内容

sed  -n  '/Jul  20  11:30:01/,/Jul  20  12:00:01/p'  var/log/messages

http://www.lryc.cn/news/100563.html

相关文章:

  • TypeScript中数组,元组 和 枚举类型
  • MyBatis-Plus-Join 多表查询的扩展
  • 认清现实重新理解游戏的本质
  • LeetCode 2050. Parallel Courses III【记忆化搜索,动态规划,拓扑排序】困难
  • ETHERNET/IP转RS485/RS232网关什么是EtherNet/IP?
  • 使用node内置test runner,和 Jest say 拜拜
  • 《面试1v1》Kafka的架构设计是什么样子
  • 比较常见CPU的区别:Intel、ARM、AMD
  • CAN转EtherNet/IP网关can协议是什么意思
  • java可变字符序列:StringBuffer、StringBuilder
  • Mac/win开发快捷键、vs插件、库源码、开发中的专业名词
  • linux 系统编程
  • Python策略模式介绍、使用方法
  • 城市气象数据可视化:洞察气候变化,构建智慧城市
  • Rust-IO
  • cp -r 源目录 目标目录
  • redis之Bitmap
  • 建设数据中台到底有啥用?
  • [运维|系统] Centos设置本地编码
  • 深入探索Python中的os.listdir函数
  • ROS1ROS2之CmakeList.txt和package.xml用法详解
  • C#设计模式之---适配器模式
  • 串口设备驱动
  • Nginx实现反向代理和负载均衡
  • 小米手机MIUI优化的影响
  • 【图论】kruskal算法
  • Django框架:使用channels实现websocket,配置和项目实际使用
  • 基于RK3588+FPGA+AI算法定制的智慧交通与智能安防解决方案
  • AI面试官:LINQ和Lambda表达式(一)
  • FPGA学习——FPGA利用状态机实现电子锁模拟