linux常用命令全集sed,Linux常用命令之sed

标题:sed命令的使用

作用:sed(stream editer)是以行为单位处理文本数据,可以对数据按行进行选取(显示打印)、替换、删除和新增等功能。

工作流程:sed是一个流编辑器,它可以对从标准输入流中得到的数据进行处理,然后把处理以后得到的结果输出到标准输出,而标准输出通常关联到终端屏幕,因此处理后的结果也会显示到屏幕上。当然,也可以把标准输出重定向到文件,这样处理后的结果就会保存在磁盘文件中。

一、用法

sed [-nefr] [动作]

参数:

-n:使用安静模式,取消自动打印模式空间。在一般来自STDIN的数据一般都会被列出到屏幕上,但如果加上-n参数后,则只有经过sed处理的那一行才会被列出来

-e:直接在命令行模式上进行sed的动作编辑

-f:直接将sed动作写到一个文件内,-f filename可以执行filename内的sed动作

-i:直接修改读的文件内容,而不是由屏幕输出

动作说明:

1. [n1[n2]] function

1.1 n1,n2一般代表选择进行动作的行数,10,20代表动作在10,20行间执行。如果不指定n1,n2,则表示后面的[动作]命令作用于与所有的行

1.2 除了用数字选择进行动作的行的范围,也可以用正则表达式,选择进行操作的行的范围

例如:打印显示所有以"#"开头的行 sed -n '/^#/p' filename

1.3 在进行替换命令的时候,一般需要用正则表达式所有行进行模式匹配,只有匹配成功的行,才会执行相应的动作操作

2. function有下面这参数:

[1] a : 新增

[2] c : 替换,c后面可以接字符串,这些字符串可以替换n1,n2之间的行

[3] d: 删除

[4] i: 插入,i之后可接字符串,这些字符串会在新的一行出现

[5] p: 打印,通常会和-n一起运行

[6] s: 替换

二、实例

例1:以行为单位的删除操作:

命令:nl test.da | sed '2,5d'

输出:

41445f5c2ce653c681ef277b3d85c56a.png

例2:在第2行后面添加 "Drink tea\n Drink beer"

命令: sed '2,a Drink tea \n Drink beer' test.da

输出:

9b1d9cb999332449f8d45d1573b04673.png

例3:将第2~5行的内容替换成为"No,2-5 Number"

命令:sed '2,5c No,2-5 Number' test.da

输出:

3daaa6618151781d7cc0077bc4d73af0.png

例4:打印2~5行的内容

命令:nl index.html | sed -n '2,5p'

输出:

ce2041d59c25914674192243fafb7db5.png

例5:打印除2~5行外的其他行

命令:nl index.html |sed -n '2,5!p

输出:

192f73ffe74875ce4570e6f0a7aea5e5.png

解释:打印除了第2~5行外的内容,亦即打印第1行和第6行~最后一行,所以可以用命令:nl index.html | sed -n '1p;6,$p'

例6:从某一行开始,按照指定的间隔打印文件中的行,比如从第2行开始每隔3行显示文件的内容

命令:nl index.html | sed -n  '2~3p'

输出:

acf7c8a87975b448504e6f457115a5db.png

解释:单引号中的第一个数字表示起始行数,第二个数字表示间隔数

例7:使用sed的s命令可以对文件中的字符串进行替换

假设现在要对如下的htm文件中的email地址从jerry@zulmma.com改成emma@zulmma.com以及对年份数字2012进行替换为2013

My homepage

Email me!

Page created by:jerry@zulmma.com

copyright @ 2012 mysite!

命令:sed -e 's/jerry@zulmma.com/emma@zulmma.com/g' -e 's/\b2012\b/2013/g' index.html

输出:

a6f773a37182fb6fd99de36243949035.png

解释:sed命令中的-e选项表示指定多个编辑命令,也可以使用";"来连接多个编辑命令。例如,上面的命令也可以表示为:sed  's/jerry@zulmma.com/emma@zulmma.com/g;s/\b2012\b/2013/g' index.html

g:表示全局替换

i:表示忽略大小写

\b字符串\b表示正则匹配单词

例8:使用sed命令实现对指定范围行内的进行行末或行首添加字符

假设要对某个文件的部分行首或行末添加一定字符或字符串

命令:sed '1,4s/^./#&/' index.html |nl

72f78777578d527924d4904b11930837.png

解释:&符号正则表达是所匹配的内容

0b1331709591d260c1c78e86d0c51c18.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值