我最爱的流编辑器sed用法总结

【替换】s


1

sed‘/mislost/long/g‘ filename

在sed中,文件的每一行都会作为输入传入到sed中,如果不加g那么上述列子中只会替换每一行

第一个匹配到的mislost。加g则会匹配一行中所有的mislost。

想要定位一个行,然后去匹配需要这样做


1

sed‘/test/s/mislost/long/g‘ filename

如果这一行包含有test,则将mislost替换为long

在例子中,/test/ 就是一个地址,sed在做操作的时候可以指定0个,1个或者2个地址。每个地


1

sed‘/test/s/mislost/long/g‘ filename

址都是一个描述模式。

·如果没有指定地址,那么命令将应用于每一行。

·如果只有一个地址,那么命令应用于这个地址匹配的任意行。

·如果指定了由逗号分隔的两个地址,那么命令应用于匹配第一个地址的第一行和它后面的行,直到匹配到第二个地址的行(包括此行)

·如果地址后面根由感叹号(!),那么命令就应用于不匹配该地址的所有行。

来看一个有趣的例子:


1

sed s‘/^$/.Mis‘

它用.Mis来取代每一个空行。在替换命令的部分(.Mis)不必转义字面的句点,所以我可以直接用.而不需要用\.来转义它。

一个在替换中列出不想被替换的对象


1

sed ‘/---/!s/--/lost/‘

上面的例子只会将--替换为lost 而不会将---替换为lost-

【删除】d


1

2

sed ‘d‘   它将删除所有的行

sed ‘1d‘  它将只删除第一行

有一个相当重要的概念:


1

sed ‘1d‘ file1
file2  它将只删除file1的第一行,不会删除file2的第一行

·在sed中,行号指由sed维护的内部行数。该计数器不会因为有多个输入文件而重置。因此,不管指定了多少个输入文件,在输入流中也只有一行1。同样,输入流也只有一个最后的行,可以用$来表示最后一行。

重要:正则表达式必须封闭在斜杠中


1

2

3

/^$/d    
只删除空行

^$d       
这样的使用方法则是错误的

$!d        
这样表示除了最后一行,都删除掉

如果提供两个地址,那么久指定了命令执行的行范围。比如:


1

/^mislost/,/^long/d      删除以mislost开头的到以long开头的左右行

有一个很有用的混合使用行地址和模式地址的列子:


1

1,/^$/d

删除了从第一行一直到第一个空行的所有行,可以用来删除某些文件的头文件。

清注意,如果文件中没有空行,将删除所有的行!

正常的删除,sed会将匹配到的行整个删除,如果我们想要只删除行中匹配的部分,可以用替换命令并指定一个空得替换,比如:

aabbccdd 想要删除bb 最后的结果为 aaccdd


1

sed ‘s/bb//‘

【提取内容】

来看两个简单的提取例子:


1

2

sed -n ‘/^root/,‘/^mislost/p

sed -n ‘/^root/p;/^mislost/p‘

第一个是提取“以root开头的行到以mislost开头的行之间的所有内容”。

第二个是提取“以root开头的行和以mislost开头的行”

【插入、追加和更改】a    i    c


1

sed ‘/^a/i\mislost‘ 插入  
在以a开头的行上插入一行mislost


1

sed ‘/^a/a\mislost‘ 追加  
在以a开头的行下追加一行mislost


1

sed ‘/^a/c\mislost‘ 更改  
把以a开头的行修改为mislost

在以a开头的行下追加mislost

注意:追加和插入只应用于单个行地址,而不是一个范围内的行。更改命令可以处理一个范围内的行。

这里的更改命令要区别于替换,替换只是将匹配的关键字替换了而不是整个行,c\则修改了整个行的内容。

【列表】l

列表命令(l) 用于显示模式空间的内容,将非打印的字符显示为两个数字的ASCII码。

cat test.txt


1

2

3

aaaa   
www.baidu.com

bbbb   
www.sina.com.cn

cccc   
www.qq.com

sed -n -e "l" test.txt


1

2

3

aaaa\twww.baidu.com$

bbbb\twww.sina.com.cn$

cccc\twww.qq.com$

【转换】y


1

sed ‘y/abc/xyz‘

y命令开启转换,转换对应为:

a=>x

b=>y

c=>z

PS:转换命令的一个可能的用处是用大写字母替换对应的小写字母

【打印】p

【退出】q

退出命令会使sed停止读取新的输入行(并停止将它们发送到输出)。


1

sed ‘/50q/‘

打印每一行,直到第50行,并且退出,类似于Unix中的head命令。

同样,这个命令也可以用地址范围来实现


1

sed -n ‘1,50p‘

【高级命令】

h或者H    将模式空间的内容复制或者追加到保持空间

g或者G    将保持空间的内容复制或者追加到模式空间

x              交换保持空间和模式空间的内容

【标签】

表示前是任意不多余7个字符的序列。标签占据一行并以冒号开始。

一个有趣的例子


1

sed ‘:a;N;s/\n//;$!ba‘

解析:

:a定义一个标签a

N将下一行的内容添加到当前读入行,并在末尾加一个\n

s/\n//将新行中的\n删掉

$!ba如果读入行不是最后一行就跳转到标签a出继续执行后面的执行

这个命令的作用在于将一个文件中的所有行并列为一行内容。

时间: 2024-12-24 11:50:41

我最爱的流编辑器sed用法总结的相关文章

Shell 基础 -- 流编辑器 sed 详解

一.流编辑器 sed 与命令 sed Linux 中,常使用流编辑器 sed 进行文本替换工作.与常使用的交互式编辑器(如vim)不同,sed 编辑器以批处理的方式来编辑文件,这比交互式编辑器快得多,可以快速完成对数据的编辑修改. 一般来说,sed 编辑器会执行以下操作: 1)一次从输入中读取一行数据: 2)根据所提供的编辑器命令匹配数据: 3)按照命令修改流中的数据: 4)将新的数据输出到 STDOUT. 在 sed 编辑器匹配完一行数据后,它会读取下一行数据并重复这个过程,直到处理完所有数据

【linux_笔记】Linux_sed(流编辑器)基本用法

学习资源来自:www.magedu.com 学习记录过程中难免出现错误,如有发现,还望大神们指出. 示例操作部分有的与历史操作有关,如果先前的示例操作没有执行过的话,可能会有部分示例的操作无法执行.示例仅供参考.(练习题在附录) sed基本用法: sed: Stream EDitor(流编辑器)    行编辑器 (全屏编辑器: vi)    sed: 默认不编辑原文件,仅对模式空间中的数据做处理:而后,处理结束后,将模式空间打印至屏幕:        (模式空间 -- 内存空间) sed [op

流编辑器 SED 十分钟入门全教程

这里借用一下酷壳网sed博文的图来开题,超赞的-- 1. sed 简介及原理简析 1.1 sed 简介 Sed 是什么?相信很多人都有所了解,sed 全称StreamEDitor 即流编辑器.生于1973年or 1974年by 贝尔实验室的 Lee E. McMahon(已故),是基于交互式编辑器ed("editor", 1971)的脚本功能及更早的qed(quick editor ,1965-1966)(Sed 比 awk 要大那么几岁,所以客官莫急,过几天我们再来详解 awk).S

流编辑器sed使用总结及利用sed从文本中提取字符串的方法

sed 是一个编辑器,但它与其它大多数编辑器不同.除了不面向屏幕之外,它还是非交互式的,我们常用的vim编辑器则是交互式的. 这意味着必须将要对数据执行的命令插入到命令行或要处 理的脚本中.sed 在一个文件(或文件集)中非交互式.并且不加询问地接收一系列的命令并执行它们.因而,它流经文本就如同水流经溪流一样,因而 sed 恰当地代表了流编辑器,可以对文件或者文件集批量的进行删除 替换 插入 追加等操作. 流编辑器非常适合于执行重复的编辑,这种重复编辑如果由人工完成将花费大量的时间. 其参数可能

shell脚本学习笔记 (流编辑器sed)

sed意为流编辑器(Stream Editor),在Shell脚本和Makefile中作为过滤器使用很普遍,也就是把前一个程序的输出引入sed的输入,经过一系列编辑命令转换为另一种格式输出. sed不只支持正則表達式.它另一些比較厉害的功能. 我给出一个样例,大家看看有什么办法能够解决它吧. <html><head><title>Hello World</title> <body>Welcome to the world of regexp!&l

流编辑器Sed

Sed简介 Sed是一款流编辑工具,用来对文本进行过滤与替换操作,特别是当你想要对几十个配置文件做统一修改时,你会感受到Sed的魅力!Sed通过一次仅读取一行内容来对某些指令进行处理后输出,所以Sed更适合于处理大数据文件.首先,Sed通过文件或管道读取文件内容,但Sed默认并不直接修改源文件,而是将读入的内容复制到缓冲区中,我们称之为模式空间(pattern space),所有的指令操作都是在模式空间中进行的,然后Sed根据相应的指令对模式空间中的内容进行处理并输出结果,默认输出至标准输出(即

文本处理三剑客之sed流编辑器

流编辑器 sed 模式空间,默认不编辑原文件,仅对模式空间中的数据做处理:处理结束后,将模式空间中数据打印至屏幕.sed是一个行编辑器. sed [options] 'Address Command' file ... Option: -n: 静默模式, 不再默认显示模式空间中的内容-i: 直接修改原文件-e SCRIPT 可以同时执行多个脚本, 操作-f /PATH/TO/SED_SCRIPT  如: sed -f /path/to/scripts file ( 指定 sed 的脚本文件)-r

Linux基础之sed流编辑器详解

之前介绍了三大文本编辑器的grep,这里介绍比grep功能更强的sed流编辑器 sed是什么? sed是Stream EDitor的缩写,man中对sed的简洁为 sed - stream editor for filtering and transforming text 它的主要功能是对文本的过滤与替换. sed的工作原理 sed的工作过程:sed是一个流编辑器,所谓流编辑器是指sed每次只从文件或stdin中读入一行,将读入的行保存至模式空间然后根据指定的要求对其进行处理,并将处理后的结果

流编辑器-awk

awk 流编辑器sed,用于对行进行删除,替换等操作,awk更适合用来排版. awk工作流程 awk将文本的内容逐行读取到内存中,awk会对读取进内存的行通过某种分隔符(默认为空格\t)进行分块,分块后会对各个块命名$0-整个行,$1-第一个块,$2-第二个块...$n-第n个块.此时可以指定awk操作的块.同sed一样,awk会通过模式匹配需要操作的行,不同的是对于未匹配的行,awk会将其忽略. #ifconfig eth0 | awk '/inet addr/{print $2}' | aw