1.功能简介
sed(Stream EDitor)是一种流文件编辑器,它一次处理一行内容。处理时,把当前处理的行存储在临时缓冲区中,称为“模式空间”(Pattern Space),接着用sed命令处理缓冲区中的内容,处理完成后,把缓冲区的内容送往屏幕,接着处理下一行,直到文件末尾。文件内容并没有改变,除非使用-i选项。sed主要用来编辑一个或多个文件,简化对文件的反复操作或者用来编写转换程序等。
sed功能同awk类似,差别在于,sed简单,对列处理的功能要差一些,awk功能复杂,对列处理的功能比较强大。
2.命令格式
sed [OPTION]... {script-only-if-no-other-script} [input-file]...
其中OPTION为命令选项,script-only-if-no-other-script为处理动作,可以由-e指定多个,input-file为输入文件,可以指定多个。
3.选项说明
选项:-n,--quiet,--silent:使用安静模式。sed的一般用法中,所有来自STDIN的数据一般都会被打印到终端上,如果加上-n后,则只有经过sed特殊处理的那一行才会被列出来。-e <script>,--expression=<script>:指定sed动作,可以由多个-e指定多个动作。-f <script-file>,--file=<script-file>:直接将sed的动作写在一个文件内,-f filename则可以运行filename 内的sed动作;-r,--regexp-extended:sed支持扩展正则表达式(默认是基础正则表达式)。-i :直接修改读取的文件内容,而不是输出到终端。--help:显示帮助。--version:显示版本。动作说明:[n1[,n2]]functionn1, n2 :不见得会存在,一般代表“选择进行动作的行数”,举例来说,如果我的动作是需要在 10 到 20 行之间进行,则写作“10,20动作行为”。function:a :新增, a 的后面可以接字串,而这些字串会在新的一行出现(目前的下一行)~c :取代, c 的后面可以接字串,这些字串可以取代 n1,n2 之间的行!d :删除,因为是删除啊,所以 d 后面通常不接任何内容;i :插入, i 的后面可以接字串,而这些字串会在新的一行出现(目前的上一行);p :列印,亦即将某个选择的数据印出。通常 p 会与参数 sed -n 一起运行~s :替换,通常这个s的动作可以搭配正规表示法!例如 1,20s/old/new/g。
4.典型示例
4.1删除行操作
(1)将 /etc/passwd 的内容列出并且列印行号,同时,请将第 2~5 行删除。
[b3335@MIC ~]$ nl -n ln /etc/passwd | sed ’2,5d’ root:x:0:0:root:/root:/bin/bash sync:x:5:0:sync:/sbin:/bin/sync shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown.....(后面省略).....
注意:原本应该是要下达 sed -e 才对,当只有一个动作的时候,没有 -e 也行,但是多于一个动作时必须要使用-e选项来指定动作。同时也要注意的是, sed 后面接的动作,请务必以两个单引号括住。
(2)只要删除第 2 行。
nl /etc/passwd | sed ’2d’
(3)要删除第 3 到最后一行
nl /etc/passwd | sed ’3,$d’
4.2新增行操作
(1)在第二行后加上”I like drinking tea”。
[b3335@MIC ~]$ nl -n ln /etc/passwd | sed ’2a I like drinking tea’ root:x:0:0:root:/root:/bin/bash bin:x:1:1:bin:/bin:/sbin/nologinI like drinking tea daemon:x:2:2:daemon:/sbin:/sbin/nologin.....(后面省略).....
(2)那如果是要在第二行前加入。
nl /etc/passwd | sed ’2i drink tea’//或nl /etc/passwd | sed ’1a drink tea’
(3)在第二行后面加入两行,”I like drinking tea”与”I like drinking beer”。
[b3335@MIC ~]$ nl -n ln /etc/passwd | sed ’2a I like drinking teanI like drinking beer’ root:x:0:0:root:/root:/bin/bash bin:x:1:1:bin:/bin:/sbin/nologinI like drinking teaI like drinking beer daemon:x:2:2:daemon:/sbin:/sbin/nologin…(后面省略)…
或者每一行使用反斜杠来分开,就可以在命令行中将一条命令分开多行输入,如下:
[b3335@MIC ~]$ nl -n ln /etc/passwd | sed ’2a I like drinking tea> I like drinking beer’
4.3替换行操作
(1)将第2-5行的内容替换成为”No 2-5 number”。
[b3335@MIC ~]$ nl -nln /etc/passwd | sed ’2,5c No 2-5 number’ root:x:0:0:root:/root:/bin/bashNo 2-5 number sync:x:5:0:sync:/sbin:/bin/sync.....(后面省略).....
4.4选择行打印
(1)仅列出 /etc/passwd 文件内的第 5-7 行。
[root@www ~]# nl -nln /etc/passwd | sed -n ’5,7p’ lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin sync:x:5:0:sync:/sbin:/bin/sync shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
4.5数据的查找并进行相关操作
(1)数据的查找并显示
搜索 /etc/passwd有root关键字的行并输出。
[b3335@MIC ~]$ nl /etc/passwd | sed -n ’/root/p’ root:x:0:0:root:/root:/bin/bash operator:x:11:0:operator:/root:/sbin/nologin
(2)数据的查找并删除 删除/etc/passwd所有包含root的行,其他行输出。
[b3335@MIC ~]$ nl /etc/passwd | sed ’/root/d’ daemon:x:1:1:daemon:/usr/sbin:/bin/sh bin:x:2:2:bin:/bin:/bin/sh…(下面忽略)…
如果想删除匹配的字符串,使用如下命令:
[b3335@MIC ~]$ nl /etc/passwd | sed ’s/root//g’
(3)数据的查找并替换 除了整行的处理模式之外, sed 还可以用行为单位进行部分数据的搜寻并取代。基本上 sed 的搜寻与替代的与 vi 相当的类似!他有点像这样:
sed ’s/被取代的字串/新的字串/g’
(4)数据的搜寻并执行命令 搜索/etc/passwd,找到root对应的行,执行后面花括号中的一组命令,每个命令之间用分号分隔,这里把bash替换为blueshell,再输出这行:
nl /etc/passwd | sed -n ’/root/{s/bash/blueshell/;p}’ root:x:0:0:root:/root:/bin/blueshell
如果只替换/etc/passwd的第一个bash关键字为blueshell,就退出
nl /etc/passwd | sed -n ’/bash/{s/bash/blueshell/;p;q}’ root:x:0:0:root:/root:/bin/blueshell
4.6多点编辑一条sed命令,删除/etc/passwd第三行到末尾的数据,并把bash替换为blueshell
nl /etc/passwd | sed -e ’3,$d’ -e ’s/bash/blueshell/’ root:x:0:0:root:/root:/bin/blueshell daemon:x:1:1:daemon:/usr/sbin:/bin/sh
-e表示多点编辑,第一个编辑命令删除/etc/passwd第三行到末尾的数据,第二条命令搜索bash替换为blueshell。
4.7直接修改文件
sed 可以直接修改文件的内容,不必使用管道命令或数据流重导向! 不过,由於这个动作会直接修改到原始的文件,所以请你千万不要随便拿系统配置来测试,使用时也要慎重。我们使用下载的regular_express.txt 文件来测试看看吧!
利用 sed 将 regular_express.txt 内每一行结尾若为 . 则换成 !
[root@www ~]# sed -i ’s/.$/!/g’ regular_express.txt
利用 sed 直接在 regular_express.txt 最后一行加入”# This is a test”。
[root@www ~]# sed -i ’$a # This is a test’ regular_express.txt
由於 $ 代表的是最后一行,而 a 的动作是新增,因此该文件最后新增”# This is a test”。
sed 的-i选项可以直接修改文件内容,这功能非常有帮助!举例来说,如果你有一个 100 万行的文件,你要在第 100 行加某些文字,此时使用 vim 可能会疯掉!因为文件太大了!那怎办?就利用 sed 啊!透过 sed 直接修改/取代的功能,你甚至不需要使用 vim 去修订!
以上就是Linux sed命令的使用的详细内容,更多关于Linux sed命令的资料请关注优爱好网其它相关文章!
相关文章:
1. Win11更新失败提示错误代码0x8007003的解决方法2. Win11 22H2 build 22621.1343发布 附KB5022913更新内容汇总3. Win11开机后出现explorer.exe应用程序错误怎么解决? exe应用程序错误解决办法4. Win11 Beta 22621.1325、22623.1325更新补丁KB5022914推送(附更新修复内容汇总)5. 微软 Win11 首个 Canary 预览版 25314 推送 附更新内容和升级方法6. Win11 Build 22623.1325 引入“关闭通道”选项,可从 Beta 频道回到正式版7. Win11 Build 25300怎么开启Emoji 15?8. Win11 预览版25300怎么开启文件资源管理器图库隐藏功能?9. KB5022845导致Win1122H2更新驱动失败 Surface出现0x80070103错误10. Win11需要多大内存才够用
