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命令处理缓冲区中的内容,处理完成后,把缓冲区的内容送往屏幕。接着处理下一行,这样不断重复,直到文件末尾。如下,简单流程图。
补充:
一次处理一行的设计模式使得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等等我们下篇推出。
要是整理成一篇,可能阅读量会偏大。
欢迎大家给予宝贵的意见或者建议。
欢迎大家补充或者共享一些其他的方法。
感谢支持。