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

Linux文本三剑客sed

sed和awk

grep就是查找文本当中的内容,最强大的功能就是使用扩展正则表达式

sed

sed是一种流编辑器,一次处理一行内容。

如果只是展示,会放在缓冲区(模式空间),展示结束后,会从模式空间把结果删除

一行行处理,处理完当前行,才会处理下一行。直到文件的末尾。

sed的命令格式和操作选项:

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

-e表示可以跟多个操作符,只要有一个操作,-e可以省略

sed -e '操作符1;操作符2' 文件1 文件2

选项:

-e:用于执行多个命令

-f:在脚本当中定义好了操作符,然后根据脚本内容的操作符对文件进行操作

-i:直接修改目标文件(慎用)

-n:仅显示script处理后的结果(不加-n,sed会有2个输出结果,加了-n之后就会把默认输出屏蔽,只显示一个结果)

p:打印结果

r:扩展正则表达式

s:替换,替换字符串

c:替换,替换指定行

y:替换,替换单个字符,多个字符替换必须和替换内容的字符长度保持一致

d:删除,删除行

a:增加,在指定行的下面一行插入内容

i:增加,在指定行的上面一行插入内容

r:在行后增加文本内容

$a 在最后一行插入新的内容

$i 在倒数第二行插入新的内容

$r 读取其他文件的内容,然后插入到对象文件的最后一行。

打印功能

寻址打印:按照指定的行进行打印

sed -n '=;p' test.txt

打印第二行和第五行

sed -n '2p;$p' test1.sh

打印奇数行和偶数行

cat -n test1.sh | sed -n 'p;n'(奇)

cat -n test1.sh | sed -n 'n;p'(偶)

过滤并打印包含o的

sed -n '/o/p' test.txt

使用正则表达式对文本内容进行过滤

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

从指定行开始,打印得一个已bash为结尾的尾行

sed -n '3,/bash$/p' test1.sh

面试题:

如何面交互删除文本内容,但是不删除文件

两种方法:
cat /dev/null > 文件名
sed -i 'd' test1.txt
删除文件内容,不删除文件
sed -i ‘d’ + 文件名 

sed的删除操作

sed -n '3d' test,txt删除第三行打印剩余的行

匹配字符串的方式删除行

s替换字符串

sed -n 's/root/test/p' /etc/passwd

替换所有的root

sed -n 's/root/test/gp' /etc/passwd

首字母变成大写

sed 's/[a-z]/\lu&/' test.txt

u& 转移首字母大写的特殊符号。\转义符。

整行替换

sed '/IPADDR/c IPADDR=192.168.233.100' /etc/sysconfig/network-scripts/ifcfg-ens33

c要写替换行的后面

单个字符替换

[root@test1 opt]# sed 'y/one/123/' test1.txt

使用sed对字符串和字符的位置进行互换

[root@test1 opt]# echo luoyuhao | sed -r 's/(luo)(yu)(hao)/\2\3\1/' yuhaoluo

[root@test1 opt]# echo 德州扑克搞着了 | sed -r 's/(.)(.)(.)(.)(.)(.)(.)/\5\6\7\1\2\3\4/' 搞着了德州扑克

[root@test1 opt]# cat test1.txt | sed -r 's/(.)-(.)(.jar)/\2/'

[root@test1 opt]# grep -E "[0-9]+." test1.txt

面试题:如何把版本号提取出来
ant-1.9.7.jar
ant-launcher-1.9.7.jar
antlr-2.7.7.jar
antlr-runtime-3.4.jar
aopalliance-1.0.jar
archaius-core-0.7.6.jar
asm-5.0.4.jar
aspectjweaver-1.9.5.jar
bcpkix-jdk15on-1.64.jar
bcprov-jdk15-1.46.jar
bcprov-jdk15on-1.64.jar
checker-compat-qual-2.5.5.jar


用grep来提取

grep -E "[0-9]+\." test2.txt
用sed提取

cat test2.txt | sed -r 's/(.*)-(.*)(\.jar)/\2/'
面试题:打印指定时间内的日志。
sed -n '/Jun 21 11:00:01/,/Jun 14:01:01/p' /var/log/messages

相关文章:

  • Spring响应式编程之Reactor核心组件
  • 网络聚合通信测试--自动化测试脚本
  • 6月20日(周四)A股行情总结:A股险守3000点,恒生科技指数跌1.6%
  • EVALUATE与XLWT与XLRD一种使用方式
  • 【机器学习300问】125、什么是双向循环神经网络(BRNN)?什么是深度循环神经网络(DRNN)?
  • 吴恩达机器学习 第二课 week4 决策树
  • 如何配置node.js环境
  • 软件设计师笔记-系统开发和运行知识(一)
  • 总结 CSS 选择器的常见用法
  • 硬盘数据恢复软件,推荐5种适合你的方法来恢复硬盘数据
  • 医学记录 --- 腋下异味
  • 手持弹幕LED滚动字幕屏夜店表白手灯接机微信抖音小程序开源版开发
  • 20-OWASP top10--XXS跨站脚本攻击
  • websocket 安全通信
  • 计算机组成入门知识
  • Brief introduction of how to 'Call, Apply and Bind'
  • C++类中的特殊成员函数
  • co模块的前端实现
  • egg(89)--egg之redis的发布和订阅
  • happypack两次报错的问题
  • Java 9 被无情抛弃,Java 8 直接升级到 Java 10!!
  • ng6--错误信息小结(持续更新)
  • PAT A1092
  • Python3爬取英雄联盟英雄皮肤大图
  • Sequelize 中文文档 v4 - Getting started - 入门
  • vue从入门到进阶:计算属性computed与侦听器watch(三)
  • Vue--数据传输
  • 构建二叉树进行数值数组的去重及优化
  • 浏览器缓存机制分析
  • 悄悄地说一个bug
  • 深入浅出Node.js
  • 【运维趟坑回忆录】vpc迁移 - 吃螃蟹之路
  • ​​​【收录 Hello 算法】9.4 小结
  • ​一、什么是射频识别?二、射频识别系统组成及工作原理三、射频识别系统分类四、RFID与物联网​
  • # MySQL server 层和存储引擎层是怎么交互数据的?
  • #100天计划# 2013年9月29日
  • (3)选择元素——(17)练习(Exercises)
  • (M)unity2D敌人的创建、人物属性设置,遇敌掉血
  • (Redis使用系列) Springboot 实现Redis消息的订阅与分布 四
  • (二)基于wpr_simulation 的Ros机器人运动控制,gazebo仿真
  • (附源码)ssm基于web技术的医务志愿者管理系统 毕业设计 100910
  • (附源码)计算机毕业设计ssm基于B_S的汽车售后服务管理系统
  • (九)One-Wire总线-DS18B20
  • (三)Pytorch快速搭建卷积神经网络模型实现手写数字识别(代码+详细注解)
  • (原创)Stanford Machine Learning (by Andrew NG) --- (week 9) Anomaly DetectionRecommender Systems...
  • (转) Face-Resources
  • .helper勒索病毒的最新威胁:如何恢复您的数据?
  • .NET 编写一个可以异步等待循环中任何一个部分的 Awaiter
  • .net 获取url的方法
  • .NET 药厂业务系统 CPU爆高分析
  • .NET关于 跳过SSL中遇到的问题
  • .net项目IIS、VS 附加进程调试
  • .vollhavhelp-V-XXXXXXXX勒索病毒的最新威胁:如何恢复您的数据?
  • /使用匿名内部类来复写Handler当中的handlerMessage()方法
  • @EventListener注解使用说明