您的位置:首页 > 游戏 > 游戏 > sed命令详解

sed命令详解

2025/2/21 3:31:01 来源:https://blog.csdn.net/qq_39203337/article/details/139237328  浏览:    关键词:sed命令详解

简介

        

sed(Stream EDitor),是一种流文件编辑器,其特点为:

1、非交互式。处理文件时,把当前处理的行存储在临时缓冲区(称为“模式空间”(Pattern Space))中,即它是基于模式匹配过滤及修改文本。

2、逐行处理,sed 命令在缓冲区中一次处理一行内容,处理完成后,把缓冲区的内容送往屏幕,接着处理下一行,直到文件末尾。

命令调用形式

sed [选项]   '[定址符]处理动作’文件  [input-file]

选项说明

-i:直接修改文件内容,而不是输出到终端。(该选项会直接修改目标文件内容,如果后面跟的动作是修改、替换、删除等操作指令,应谨慎使用)
 
-n:安静模式,屏蔽默认输出(全部文本),只有经过sed特殊处理的那一行才会被列出来。


-e :指定sed动作,可以由多个-e指定多个动作。
 
-r:启用扩展的正则表达式,若与其他选项一起使用,应作为首个选项
 
-f :直接将sed的动作写在一个文件内,-f filename则可以运行filename 内的sed动作;
 
--help:显示帮助。
 
--version:显示版本。
 

动作说明

[n1[,n2]] function 

其中[n1[,n2]]称为定址符,用来定义需要操作的文本,如指定处理的起、止行数,甚至是正则表达式。如果n1,n2不存在,则表示全部

fuction为编辑指令,可以为增删改查等指令

a :新增, a 的后面可以接字串,而这些字串会在新的一行出现(目前的下一行)~
c :取代, c 的后面可以接字串,这些字串可以取代 n1,n2 之间的行!
d :删除,因为是删除啊,所以 d 后面通常不接任何内容;
i :插入, i 的后面可以接字串,而这些字串会在新的一行出现(目前的上一行)行前插入数据;
p :打印,亦即将某个选择的数据印出。通常 p 会与参数 sed -n 一起运行~
s :替换,通常这个s的动作可以搭配正规表示法!例如 1,20s/old/new/g

示例

创建示例操作文件test.txt,内容如下:

显示2到4行的内容

        sed -n "2,4p" test.txt 

此处使用-n选项将结果输出到屏幕,如果使用-i选项会是什么结果?

显示第2行和第四行的内容

        sed -n "2p;4p" test.txt

注意,此处两命令的差别,一个使用的是逗号",",一个使用的是分号(表示的是2个动作)

在2到4行新增数据

对比一下输出结果可知,符合预期。注意,此处是没有直接把修改内容写入实际文件的,如果需要实际写入文件,使用-i选项参数

修改以xxx开头的文件内容

sed "/^li/s/ne/test/" test.txt

这里使用"/^li"表示命中所有以li字符串开头的行,然后通过s动作参数,使用test字符串替换ne字符串,注意:这里未添加"-i"选项没有把改变直接写入源文件

插入数据

sed "2i this is test insert" test.txt

注意:这里未添加"-i"选项没有把改变直接写入源文件

替换行内容

sed "/^li/c test" test.txt

这里的动作参数使用c表示直接整行替换,c动作参数后面的字符串"test"用于替换整行

注意:这里未添加"-i"选项没有把改变直接写入源文件

字符串替换

sed "/^li/s/line/change/" test.txt

这里使用"change"字符串替换"line"字符串,其中的符号"/"

实际案例分享

公司有海外业务部署在海外服务器上,而api调用客户端服务器部署在国内,不能直接调用,为此搭建了一个nginx反向代理服务,通过nginx调用到海外。而海外服务器使用的域名,ip会经常变动,为此,希望编写一个脚本,通过修改nginx的挂载配置文件,达到快速修改nginx反向负载的配置的目的:

nginx的配置内容如下:

脚本内容如下:

这样后续就只需要输出参数,调用脚本即可修改。不用再使用交互式的命令vi。甚至后续可以通过java程序堆外提供http服务直接调用该脚本完成,大大提升了效率

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com