linux系统shell语言流文本编辑器——sed

13 篇文章 1 订阅

sed文本交互指令

sed: stream editor(流编辑器)的缩写. 作用是进行文本的替换.

非交互式编辑器,一次处理一行内容。(流文本编辑器)

简介

sed是一种在线的、非交互式的编辑器,他一次处理一行内容,处理时,把当前处理的行存储在临时缓冲区,称为模式空间,接着用sed命令处理缓冲区的内容,处理完成后,把缓冲区的内容送往屏幕,接着处理下一行,直到文件末尾,文件内容不发生改变,除非使用重定向存储输出,sed主要用来自动编辑一个或多个文件,简化对文件的反复操作

sed格式

sed 选项 命令 文件
sed 选项 -f 脚本 文件
					
选项:
-f :指定一个规则文件
-a :新增,后面可以接字串,这些字串会在新的一行出现(目前的下一行)
-c :取代,后面可以接字串,这些字串可以取代 n1,n2 之间的行
-d :删除
-i :修改源文件
-p :打印,亦即将某个选择的数据印出。通常 p 会与参数 sed -n 一起运行
-s :取代,可以直接进行取代的工作,通常这个 s 的动作可以搭配正规表示法
-n :取消默认的完整输出,只要需要的
-r :sed 使用扩展正则表达式
-e :允许多项编辑

sed替换标记

g  //表示行内全面替换。  
p  //表示打印行。  
w  //表示把行写入一个文件。  
x  //表示互换模板块中的文本和缓冲区中的文本。  
y  //表示把一个字符翻译为另外的字符(但是不用于正则表达式)
\1 //子串匹配标记
&  //已匹配字符串标记

sed返回值

都是0,对错不管。只有当命令存在语法错误时,sed的退出状态才是非0

sed和正则表达式

sed在文件中查找模式可以使用正则表达式(RE)和各种元字符
sed支持的元字符:
基本元字符:^,$,.,*,[],[^],\<\>,\(\),\{\}
扩展元字符:?,+,|,()
					
使用扩展元字符的方式:
\+  转义
sed -r 加-r

sed命令

命令格式: / / /
d:删除
s:替换     //替换写法和vi编辑器里替换写法一样
r:读文件   //当前文件中,读取其他文件的部分内容
p:打印到终端   //有关键字将关键字所在行复制一行
w:写文件,另存为
a:追加,选中关键字所在行之后增加
i:插入,选中关键字所在行之前增加
c:替换整行,也可以一行替换多行
n:获取下一行
!:反向选择
e:多重编辑,和;使用方法一样

sed的使用

sed删除

sed -ri '/^.#/d;/^$/d' /etc/配置文件     //删除配置文件中的#号
sed -ri '1~2d'  文件名       //从第一行开始,每隔两行删一次
sed -ri '1d;3d;5d'  文件名   //删除1,3,5行
sed -ri '1d,5d'  文件名      //删除1-5行
sed '2,$d' 文件名        //删除第2行到最后一行
sed '/关键字/d' 文件名    //匹配到关键字,删除此行
sed '/^$/d' 文件名       //删除空行 

sed添加

给文件行添加注释
sed -ri  '1,10s/^/#/' /文件      //注释文件前十行

添加字符
sed -r -e '/^1/i\haha' 文件名    //给第一行上面添加haha
sed -r -e '$a \yesyes' 文件名    //给最后一行后面添加yesyes 

sed备份

sed修改文件前备份文件
sed -i.bak '1d;3d;5d'  文件名    //修改文件前备份一份

sed使用外部变量

sed -ri "1a$变量名"  /文件   //文件第一行添加变量,双引号不转译$符号,需要转义$可以使用\

sed替换

sed 's/替换前/替换后/g' 文件名    //全局用替换后替换替换前的字符串
sed 's/替换前/替换后/gi' 文件名    //忽略大小写,全局用替换后替换替换前的字符串
sed 's/替换前/替换后/ng' 文件名   //匹配到第n次开始替换
sed 's/^#//' 文件名             //匹配到#并用" "替换
sed -n '10/.$//' 文件名         //删除第10行的最后一个字符
sed '10 s/$/字符/' 文件名      //给第10行行尾添加字符

sed显示

sed -n '/字符串/p' 文件名   //显示字符串所在的行
sed -n '1p' 文件名   //显示第一行

sed取出一个文件路径的目录名称

echo "/etc/sysconfig/network" | sed -r 's@^(/.*/)[^/]+/?@\1@g'

's@^(/.*/)[^/]+/?@\1@g'解释:
s@@@                //替换
^(/.*/)[^/]+/?      //小括号是匹配两个目录之间的任意字符
						^/.*/是匹配行首字符
						[^/]+取除了/以外的字符
						/?是由0-1个/
\1                  //正则的组,调用前面()定义的组
g                   //全局显示
  • 28
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值