Linux运维文本处理三剑客之sed命令
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Linux运维文本处理三剑客之sed命令相关的知识,希望对你有一定的参考价值。
一· sed简介
与Vi等全屏编辑器不同,sed是一个非交互式的文本编辑器,它可以对文本文件和标准输入进行编辑, 标准输入可以来自键盘、文件重定向、字符串、变量,甚至来自管道的文本。sed是对文本中的行进行 逐行处理。
sed只是对缓冲区中原始文件的副本进行编辑,并不编辑源文件。如何需要保存改动的内容,需要将输 出重定向到另一个文件,可以使用下面格式的命令:
sed ‘sed命令‘ input-file > result-file
二· sed调用的二种方式:
1.在shell命令行输入命令调用sed,格式为:
sed [option] ‘sed命令‘ 输入文件
例:sed -n ‘1,5p‘ /etc/inittab
注意sed命令需要用单引号引起来
2. ./sed 脚本文件 输入文件
三· sed 常用的选项
-n : 表示不打印所有行到标准输出
-e:表示将下一个字符串解析为sed编辑命令,如果只传递一个编辑命令可省略
-r:表示可以使用扩展正则表达式元字符
-i:直接修改原文件
四· 文本定位方式
空为全局:即不定位行号为作用全文
x:x为指定精确行号
x,y:指定从x到y的行号范围
/pattern/:查询包含模式的行
/pattern/pattern/:查询包含两个模式的行
/pattern/,x:从与pattern匹配 的行到x号的行之间的行
x,/pattern/:从x号行到与pattern匹配的行之间的行
x,y!:查询不包括x和y行之间范围的行
!不能用于关键字匹配,无法表示不与/pattern/匹配的行
$: 表示最后一行
例: sed -n ‘/\./p‘ /etc/inittab 匹配 . 符号
sed -n ‘$p‘ /etc/inittab 打印最后一行
sed -n ‘2,10!p‘ /etc/inittab 打印不在2至10行内的行
五· 基本编辑命令
i \ : 在匹配行的前面插入文本
a \: 在匹配行的后面插入文本
c \:将所匹配的文本行利用新文本替代(整行替换)
d:删除指定行
w:写入到一个新文件
r:从文本中读入文本
y:字符变换,将一系列字符变换为相应字符,对字符逐个处理
sed ‘y/12345/678910/‘ input (被变换的字符序列/变换的字符序列/)
要求被变换的字符序列和变换的字符序列等长,否则报错
l:显示控制字符(非打印字符)
q:完成指定地址的匹配后立即退出
s:将所匹配的文本行利用新文本替换,和c \相比,s可以替换字符串,而c \只能替换整行
s/被替换的字符串/新字符串/[替换选项]
s/pattern/string/g
被替换字符串可以用正则表达式,而新字符串不可以
如: s/m.*l/lx/g (/符号可以换成@,#,%等符号,s#m.*l#lx#g)
还可以指定替换第几次匹配的关键字,只需在替换的选项上加相应数字,1-512之间
如:sed -n ‘s/mxl/lx/2p‘ (替换第2次匹配到的mxl字符为lx)
{}:指定在定位行上能执行的命令组,类似于选项-e
例: sed -n ‘/mxl/p‘ -e ‘/mxl/=‘ /etc/inittab 等价于
sed -n ‘/mxl/{p;=}‘ /etc/inittab
sed -n ‘/mxl/{s/m/M/g;s/x/X/g;}‘ /input
本文出自 “冷月葬玉魂” 博客,请务必保留此出处http://mxlmgl.blog.51cto.com/9834691/1753969
以上是关于Linux运维文本处理三剑客之sed命令的主要内容,如果未能解决你的问题,请参考以下文章