linux文件处理--sed编辑器常用介绍及案例(代码片段)

沉入深海 沉入深海     2022-12-10     508

关键词:

sed 编辑器

一、sed 编辑器

1.sed编辑器:

sed是一种流编辑器,流编辑器会在编辑器处理数据之前基于预先提供的一组规则来编辑数据流。
sed编辑器可以根据命令来处理数据流中的数据,这些命令要么从命令行中输入,要么存储在一个命令行文本文件中。

2.流程

sed工作流程主要包括读取、执行和显示三个过程

  • 读取:sed 从输入流(文件、管道、标准输入)中读取一行内容并储存在临时的缓冲区(称为模式空间)
  • 执行:默认情况下,所有sed命令都在模式空间中顺序的执行,除非指定了行的地址,否则sed命令将会在所有的行上依次执行。
  • 显示:发送修改后的内容到输出流。在发送数据后,模式空间将会被清空。

在所有的文件内容都被处理完成之前,上述过程将重复执行。直至所有内容被处理完。

注意:默认情况下所以偶sed’命令都是再模式空间内执行的,因此输入的文件并不会发生任何变化,除非是用重定向存储输出的。

3.具体使用

3.1命令格式:

sed -e '格式' 文件1 文件2 ...
sed -n -e ‘操作’ 文件1 文件2 ...
sed -f 脚本文件 文件1 文件2 ...
sed -i -e '操作' 文件1 文件2 ...
sed -e ' n                #这里的n指行号,里跟着操作命令
操作1
操作2
...
 ' 文件1 文件2             #这里的文件不能是目录

3.1 常用选项(-e 、f、h、-n、-i):



-e或 --expression=: 表示用指定命令来处理输入的文本文件,
     只有一个操作命令时可省略,一般在执行多个操作命令使用。

f或  --file=: 表示用指定的脚本文件来处理输入的文本文件。

h或  --help: 显示帮助。

-n  --quiet或silent:禁止sed编辑器输出,但可以与p命令一起使用完成输出。

-i: 直接修改目标文本文件。       #使用时一定慎用!!!直接对文本进行修改,最好先备份在使用         

-n

如果没有-n,会输出两遍

-e的格式

sed -n -e '=;p' tt.txt              #一条-e可以不加而写在一起,中间用;隔开
sed -n -e '=' -e 'p' tt.txt         #两条时则必须要加


-i指令,直接在原文件上覆盖(慎用!!)

使用sed配合“i”指令用时,一定需要谨慎使用,这是直接对文本进行修改,最好备份一下再使用,防止原文件被直接覆盖导致事故!!!

3.2常用操作


s:替换,替换指定字符。

d:删除,删除选定的行。

a:增加,在当前行下面增加一行指定内容。

i:插入,在选定行,上面插入一行指定内容。

c: 替换,将选定行替换为指定内容。

y:字符转换,转换前后的字符长度必须相同。

p: 打印,如果同时指定行,表示打印指定行;如果不指定行,则表示打印所有内容;如果有非打印字符,则以ASCII码输出。其通常与“-n”选项一起使用


3.3使用地址来打印

sed编辑器有2种寻址方式(数字形式及文本模式):

1、以数字形式表示行区间

打印第一行


sed -n '1p' tt.txt 
sed -n '1=;1p' tt.txt 

打印最后一行
sed -n '$p' tt.txt 
sed -n '$=;$p' tt.txt

打印1-4行的内容
sed -n '1,4p' tt.txt 

打印4到最后一行
sed -n '4,$p' tt.txt 

打印4及后面的一行
sed -n '4,+1p' tt.txt

打印前四行并且退出

打印奇数行:'p;n’在第一行打印后,自动跳到到下一行,第二次执行命令的时候是在第三行了

sed -n 'p;n' tt.txt

打印偶数行:'n;p’第一行直接空行,直接在第二行打印,第二次执行,直接跳到第三行,在第四行打印

sed -n 'n;p' tt.txt


sed -n '2,$n;p' tt.txt       #从第二行开始,n移动下一行,p打印,表示打印奇数行


由2开始,第二行n跳过,第三行p打印。

2、用文本模式来过滤出行

sed -n ' /user/p' /etc/passwd    #//搜索包含user的行进行打印,区分大小写


sed -n ' /^a/p' /etc/passwd     #搜索以a开头的行进行打印

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


sed -n '/ftp\\|root/p' /etc/passwd   #搜索包含ftp或者root的行进行打印


sed -n '2,/nobody/p' /etc/passwd     #从第二行开始打印到包含nobody的行


sed -nr '/ro1,t/p' /etc/passwd    #-r表示支持正则表达式

3.4删除行


sed 'd' tt.txt           #不指定行号,全部删除


sed '/nologin$/d' /etc/passwd      #删除包含nologin字符的行


sed '/nologin$/!d' /etc/passwd     #不删除包含nologin的行

从字符串为2的位置删到字符串为3的位置


注意:只要再包含开启删除的字符串就又开启了删除功能了,因此使用此功能需要特别注意。 否则会误删后续匹配字段的行

3.5替换


行范围 s/旧字符 /新字符 /替换标记

4种替换标记



数字:表明新字符串将替换第几处匹配的地方
g:表明新字符将会替换所有匹配的地方
p:打印与替换命令匹配的行,与-n一起使用
w 文件:将替换的结果写到文件中


sed -n 's/root/admin/p' /etc/passwd    #将匹配行的第一个root更改为admin

sed -n 's/root/admin/2p' /etc/passwd   #将匹配行的第二个root更改为admin


sed -n 's/root/admin/gp' /etc/passwd   #将匹配行的所有root更改为admin 


sed '1,20 s/^/#/' /etc/passwd          #1-20行行首添加#号

3.6从脚本文件中读取命令

我在tt2.sed脚本里写入命令,再直接读取脚本进行执行


sed -f tt2.sed tt2.txt       #直接读取tt2.sed脚本里的命令进行执行 

sed '1,20w out.txt' /etc/passwd   #将passwd中1-20的内容保存到out.txt文件中


sed -n 's/\\bin\\/bash\\/bin\\/csh/p' /etc/passwd   #把以/bin/bash的部分全部更换为/bin/csh。注意这里的\\是转义符,目的是为了使/单纯的作为符号使用

sed命令中 ! 可以代替/ 表示分隔符

3.7插入


sed '/555/c ABC' tt2.txt 



   sed '1,3a PP' tt2.txt            #1-3行每行都下插入P
   


在某行上面插入一行内容
一般用于加在首行


sed 'li aa' tt2.txt      #在首行插入一行
sed '2i AA' tt2.txt      #在第二行插入一行


sed '5r /etc/resolv.conf' 123.txt  #在第五行后导入该文件内容


sed '/root/H;d;$G' /etc/passwd     #将包含root的行剪切到末尾。H表示复制到剪切板,d删除。
                                     # G表示粘贴到指定行后。


sed '1,2H;3,4G' /etc/passwd     #将12行的内容,复制到3行后面及4行后面。

sed常用案例(转自老男孩)

功能说明Sed是StreamEditor(流编辑器)缩写,是操作、过滤和转换文本内容的强大工具。常用功能有增删改查,过滤,取行。[[email protected]~]#sed--version#→sed软件版本GNUsedversion4.2.1语法格式sed[options][sed-commands][input-file]sed[选项][sed... 查看详情

正则表达式sed学习(代码片段)

sedsed是一个流编辑器,非交互式的编辑器,它一次处理一行内容.处理时,把当前处理的行存储在临时缓冲区中,称为“模式空间”(patternspace)接着用sed命令处理缓冲区的内容,处理完成后,把缓冲区的内容送往屏幕。接着处理... 查看详情

linux之shell编程(14)--sed关键字详解演示

一.sed介绍sed是一种轻量级流编辑器,它可以对从标准输入中接收的数据进行编辑、可以利用脚本来处理文本文件,也可以可依照脚本的指令来处理、编辑文本文件。其最主要的作用是来自动编辑一个或多个文件、简化对... 查看详情

linux-系统随你玩之--文本处理三剑客--grep继任者sed

文章目录1、sed概述1.1、与vim等编辑器的区别:1.2、sed工作原理1.3、sed数据处理原理1.4、正则表达式概念2、sed语法和常用选项2.1、语法:2.2、sed常用内部命令2.3、参数:3、sed+正则表达式(定位)3.1、数字定址3.2、常用实例3.2.1、... 查看详情

sed命令及vim的末行命令

sed:StreamEDitor,流编辑器,以行为单位对一个或多个文件进行编辑处理;每一次sed都会处理给定文件中的一行内容。 在sed处理文本时,将正在处理的当前行存储到临时的缓冲区中,称为“模式空间”;用当前行去匹配给定的... 查看详情

文本处理三剑客sed

...Sed介绍Sed用法Sed高级用法处理文本的工具sed?StreamEDitor,行编辑器?sed是一种流编辑器,它一次处理一行内容。处理时,把当前处理的行存储在临时缓冲区中,称为“模式空间”(patternspace),接着用sed命令处理缓冲区中的内容,处... 查看详情

shell脚本——sed详细介绍(包含应用案例)(代码片段)

...完成自动化处理任务。Sed在处理数据时默认不直接修改源文件,而是 查看详情

6.2bash编程整数测试及特殊变量

6.2 linux的三大神器 grep,sed(流编辑器),awksed基本用法sed:StreamEDitor  行编辑器(全屏编辑器:vi)sed:模式空间  默认不编辑原文件,仅对模式空间中的数据做处理:而后,处理    结束后,将模... 查看详情

sed命令介绍

sed是一个非交互性性文本编辑器,它编辑文件或标准输入导出的文件拷贝。标准输入可能是来自键盘、文件重定向、字符串或变量,或者是一个管道文件。sed可以随意编辑小或大的文件,有许多sed命令用来编辑、删除,并允许做这项... 查看详情

sed常用基本命令(代码片段)

...Sed常用的基本命令。Linuxsed命令主要用来处理、编辑文本文件。sed-i命令可直接修改文件替换替换某个字符串sed-i"s/旧字符串/新字符串/g"文件名例如:要将test.txt文件中的AAA全部替换为BBB,即:sed-i"s/BBB/AAA/g"... 查看详情

sed常用选项的简单介绍

...本用法1.sed命令-n选项的用法sed-n‘1p‘/etc/passwd(显示passwd文件的第一行,不加n则会全部显示,p是打印)sed‘1,4d‘/etc/passwd(d删除,删除passwd的1-4行内容,并显示删除后的内容)2.sed命令-i选项的用法正常情况下sed命令,只是把处理... 查看详情

linux实验案例:检索备份及编辑文件

...掌握查看和检索文件内容的方法,以及在命令行界面中vi编辑器的使用方法,并能够对文档进行备份与恢复操作步骤如下:练习文件查看及检索操作查看/etc/filesystems文件,确认当前系统支持的文件系统类型[root@pd001~]#cat/etc/filesyst... 查看详情

玩转linux之sed命令详解(代码片段)

Linuxsed命令是利用script来处理文本文件。sed可依照script的指令,来处理、编辑文本文件。Sed主要用来自动编辑一个或多个文件;简化对文件的反复操作;编写转换程序等。执行时,sed会从文件或者标准输入中读取一行,将其复制... 查看详情

linux命令之sed(代码片段)

  sed是一种流编辑器,它是文本处理中非常中的工具,能够完美的配合正则表达式使用,功能不同凡响。处理时,把当前处理的行存储在临时缓冲区中,称为“模式空间”(patternspace),接着用sed命令处理缓冲区中的内... 查看详情

技能篇:sed教程-linux命令(代码片段)

前言sed全名为streameditor,是用于文本处理的流编辑器,支持正则表达式。sed处理文本时是一次处理一行内容关注公众号,一起交流,微信搜一搜:潜行前行sed语法示例:sed-i\'s/原字符串/新字符串/\'/home/test.txtsed命令处理的内容是... 查看详情

sed速查手册

1.Sed简介sed是一种在线编辑器,它一次处理一行内容。处理时,把当前处理的行存储在临时缓冲区中,称为“模式空间”(patternspace),接着用sed命令处理缓冲区中的内容,处理完成后,把缓冲区的内容送往屏幕。接着处理下一... 查看详情

sed命令基础及高级用法

sed工具:sed是文本流编辑器,逐行对文件的内容进行处理用法:sed[option]...‘script‘inputfile...选项:    -n:静默模式,不输出模式空间的内容至屏幕  -e:实现多点的功能编辑  -f/path/from/script_file:从指定... 查看详情

linux:文本处理系列-1.行截取

...fsed-n:随意选择需要查看的行sed命令是一个面向行处理的编辑器,可以和正则表达式配合使用,附上较全面的sed命令使用教程。https://man.linuxde.net/sed4、awk截取行的指定长度字符串lesstest.gz|awk'if(NR%2==1)printelseprintsubstr($1,1,75)'... 查看详情