sed
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 //全局显示