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

linux shell命令sed 向末尾插入一行_谈一谈Linux三剑客sed命令,基本概念及简单案例...

浅谈Linux三剑客sed命令篇一

前言:

Linux中一切皆文件,如配置文件,日志文件等等。当我们对这些文件进行一些操作时(如:编辑,查询等等),一般都是使用vi、vim、cat等等基本的命令。但是这些命令效率并不是很高,例如使用vi打开一个上百M的文件,可能会卡顿一会。这时我们的三剑客就登上了舞台。三剑客:awk、sed、grep。使用这哥仨,我们能够在达到同样效果情况下节约大量的工作时间,从而工作提高效率。

Sed简述:

Stream Editor文本流编辑,是一个"非交互式的"面向字符流的编辑器。

(1) 、打印功能

能同时处理多个文件多行内容,可以不对原文件改动把整个文件输入到屏幕。

(2)、文本替换

把匹配到模式的内容输入到屏幕上。

(3)、修改文本

可以对原文件改动,但是不会在屏幕上返回结果。(谨慎使用!!!)

总结:

Sed就是修改文本替换文本打印文本的一个工具。

执行流程:

Sed是从文件或管道中读取一行,处理一行,输出一行;再读取一行,再处理一行,再输出一行...

当处理一行时,把当前处理的行存储在临时缓冲区中,称为模式空间(pattern space),接着用sed命令处理缓冲区中的内容,处理完成后,把缓冲区的内容送往屏幕。接着处理下一行,这样不断重复,直到文件末尾。如下,简单流程图。

c28a54fa5786d88bb89337c861136669.png

补充:

一次处理一行的设计模式使得sed性能很高,sed在读取大文件时不会出现卡顿的现象。

例如:使用vi命令打开几十M上百M的文件,明显会出现有卡顿的现象,这是因为vi命令打开文件是一次性将文件加载到内存,然后再打开。Sed就避免了这种情况,一行一行的处理,打开速度非常快,执行速度也很快。

1、

语法格式:

(1) 、

Sed [选项] 编辑命令 文件

(2) 、

Shell 命令 | sed [选项] 编辑命令

2、

常用选项

-n:只显示匹配处理的行

-e:执行多个编辑命令(一般使用;代替)

-i:直接在文件中进行修改,不输出到屏幕

-r:支持扩展正则表达式

-f:从脚本文件中读取内容并执行文件中的编辑命令。

补充:这里比较常用的-n -r -e(用;代替)

3、

常用编辑命令

p:打印匹配行

d:删除匹配行

a:在定位行号后附加新文本信息

i:在定位行号后插入新文本信息

c:用新文本替换定位文本

r:从另一个文件中读文本,类似输入重定向(

w:写文本到一个文件,类似输出重定向(>)

s:使用替换模式替换相应模式

补充:这里比较常用的p d s

简单案例分析:

补充模式:

sed -n '/模式/p' 文件

注意:

这里的模式

(1) 正则表达式(扩展正则记得加-r)

(2) 精确的字符(指定的行)

案例1:

n 一般和 p连用

//打印文件的3-6行,使用行号

odysee:~$sed -n '3,6p' /etc/passwd

5d5cd19f67ec93022a6cf137dd27d91d.png

//打印(^odysee)以odysee开头的行,使用正则

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

129c0e1d10ba966987b55868e5cb9ff1.png

案例2:

参数d(删除匹配行),不会改变原文件内容

//$表示最后一行,!表示取反,d删除匹配行,p打印,;多个命令分割符

//连起来就是只打印文件最后一行

sed -n '$!d;p' /etc/passwd

dbe927cc2cacb59f4bf7ade75ca2a24c.png

查看原文件,并没有改变

8b93f7880a6f37a79ccf7b5ca37e904a.png

案例3:

参数a(在定位行号后附加新文本信息)

//1a表示在第一行后面追加,也可使用正则

sed '1a abc' demo.txt

509f8ed7631ab81b0588b9d964395bac.png

案例4:

参数i(在定位行号后插入新文本信息)

//1i:在第一行前插入,可以使用正则

sed '1i abc' demo.txt

1bc5d0bc60bf39f1635493e968842434.png

sed命令的基本用法我们先整理到这里,下面关于参数c、s、r、w等等我们下篇推出。

要是整理成一篇,可能阅读量会偏大。

欢迎大家给予宝贵的意见或者建议。

欢迎大家补充或者共享一些其他的方法。

感谢支持。

相关文章:

  • mysql flink 实时_Flink1.8实时数仓项目实战
  • 创建excel服务失败_什么是数据驱动测试?学习创建框架
  • mysql cbo优化器_Oracle约束Constraint对于CBO优化器的作用
  • php结合MySQL的柱状图_jpgraph+php+mysql生成柱状图(含代码)
  • 查看有哪些namespace_Linux操作系统中的namespace是个什么鬼
  • zabbix php mysql_Centos7+PHP5.6+MySQL5.7+Zabbix4.0部署
  • 判别式模型python_判别式模型与生成式模型
  • 双鉴探测器是哪两种探测方式结合_报警的基本知识
  • 虚拟机annaconda连接mysql_Python3.5(ANCONDA3)连接MYSQL数据库
  • mysql 存储过程enum 变量初始化_mysql存储过程变量使用-bug记要
  • mysql获取option的value_js:如何获取select选中的值
  • java链表 排序_Java实现单链表的快速排序和归并排序
  • java jar包 资源_java jar包资源下载
  • flash builder java_Flash Builder4.5 + BladeDS + Java 集成实例
  • java 打包成war包后 获取类路径_一个Java项目布署到weblogic里,听说weblogic会把classes目录打成jar包,怎么获取classes里文件的路径...
  • 实现windows 窗体的自己画,网上摘抄的,学习了
  • [译] React v16.8: 含有Hooks的版本
  • 【EOS】Cleos基础
  • ➹使用webpack配置多页面应用(MPA)
  • 2017届校招提前批面试回顾
  • Angular6错误 Service: No provider for Renderer2
  • Asm.js的简单介绍
  • HashMap ConcurrentHashMap
  • Java新版本的开发已正式进入轨道,版本号18.3
  • linux学习笔记
  • mysql innodb 索引使用指南
  • Python利用正则抓取网页内容保存到本地
  • RedisSerializer之JdkSerializationRedisSerializer分析
  • 程序员最讨厌的9句话,你可有补充?
  • 短视频宝贝=慢?阿里巴巴工程师这样秒开短视频
  • 多线程 start 和 run 方法到底有什么区别?
  • 实现简单的正则表达式引擎
  • 异常机制详解
  • 转载:[译] 内容加速黑科技趣谈
  • Oracle Portal 11g Diagnostics using Remote Diagnostic Agent (RDA) [ID 1059805.
  • elasticsearch-head插件安装
  • FaaS 的简单实践
  • 翻译 | The Principles of OOD 面向对象设计原则
  • #传输# #传输数据判断#
  • #微信小程序(布局、渲染层基础知识)
  • #我与Java虚拟机的故事#连载09:面试大厂逃不过的JVM
  • (003)SlickEdit Unity的补全
  • (iPhone/iPad开发)在UIWebView中自定义菜单栏
  • (翻译)Quartz官方教程——第一课:Quartz入门
  • (附源码)ssm基于jsp高校选课系统 毕业设计 291627
  • (一)为什么要选择C++
  • (转载)Linux网络编程入门
  • ***测试-HTTP方法
  • ***汇编语言 实验16 编写包含多个功能子程序的中断例程
  • *_zh_CN.properties 国际化资源文件 struts 防乱码等
  • .360、.halo勒索病毒的最新威胁:如何恢复您的数据?
  • .NET 4.0中的泛型协变和反变
  • .net获取当前url各种属性(文件名、参数、域名 等)的方法
  • .NET建议使用的大小写命名原则
  • .NET开发不可不知、不可不用的辅助类(三)(报表导出---终结版)