优秀的编程知识分享平台

网站首页 > 技术文章 正文

浅谈Linux三剑客sed命令篇一(linux sed)

nanyue 2024-09-21 19:50:37 技术文章 7 ℃

浅谈Linux三剑客sed命令篇一

前言:

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

Sed简述:

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

(1) 、打印功能

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

(2)、文本替换

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

(3)、修改文本

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

总结:

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

执行流程:

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

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

补充:

一次处理一行的设计模式使得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

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

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

案例2:

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

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

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

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

查看原文件,并没有改变

案例3:

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

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

sed '1a abc' demo.txt

案例4:

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

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

sed '1i abc' demo.txt

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

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

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

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

感谢支持。

Tags:

最近发表
标签列表