首页 > 代码库 > sed
sed
%s/183.56.170.5/183.56.170.
%s/122.13.226.5/122.13.226.
%s/fengyun-mm-170.5/fengyun-mm-170.
sed
语法: sed ‘ 范围(条件) 命令‘ file
-n:关闭输出(选项)
p 用来打印文本行(命令)
sed -n ‘2,5s/tom/TOM/gp‘ file 只对满足条件的才输出 不变化的不输出(p的功能)
-e: 后面加命令(一次可以执行多个命令)(选项)
-i:修改原文件(选项)
sed -i ‘s/tom/Tom/g‘ file
sed -i.bak ‘s/tom/Tom/g‘ file (-i 参数 不要与-n选项和 -p标签)
-r 支持扩展正则表达式(选项)
-f 后面接脚本文件(选项)
分组(group):
在old部分相关位置使用()括起来,在new部分可以引用。第一个括号用\1,第二个用\2... 依次引用
d :删除
cat -n passwd |sed ‘35d‘ ;删除passwd的行
范围可以使用,($表示最后一行)
cat -n passwd | sed ‘10,35d‘ ;删除10到35行
cat -n passwd | sed ‘$d‘ ;删除最后一行
~:表示跨步 sed ‘2 ~ 2 d‘ passwd
正则表达式:
sed ‘/tom/d‘ tom 含有tom删除
s: 替换
sed ‘(范围)s/old/new/(可加标签 数字表示替换第几个 g 表示全部替换)‘ file
old 部分可以用正则表达式 new不可以
可以用&在new部分代替表示old部分的类容
\U 把\U后面全部转换成大写(用在new 这部分)
\u 把\u的第一个字符把成大写
\L变成小写(所有)
\l后面第一个变成小写
\E表示终止end之意 解决\U \L的极端问题
a:在指定行的下一行增加一行
sed ‘$anhaoma‘ file 在最后一行后面添加一行
i:在指定行的上一行添加
c:替换------>把满足条件的一行都替换 (change)
sed ‘/^ONBOOT/c ONBOOT=yes‘ file 把以OBBOOT开头的行都替换成 ONBOOT=yes
y:替换 y/abc/xyz/ (把a换成x,b换成y,c换成z,是这样的对应关系)(transform)
唯一可以处理单个字符的sed编辑器命令
如果old和new部分的长度不同 sed编辑器会产生一条错误消息
w 把那些能满足模式匹配的行保存到指定的输出文件
sed ‘s/test/trial/w test ‘ filename
= 用来打印行号
l 用来列出行号
r 读取命令(r)允许你将一个独立文件中的数据插入到数据流中
sed ‘3r filename‘ filename1
filename 可以是绝对路径 也可以是相对路径
不能对读取命令使用地址区间
! 排除命令
就是让原本起作用的命令 不起作用
sed -n ‘/header/!p‘ filenae
//除了含有地址中指定文本的行外,文件中所有的行都打印
b 跳转命令
sed ‘{2,3b ; s/this/that/ ;s/big/small/}‘ data2
跳转命令为数据流中的第二行和第三行跳过了这两个替换命令
t 测试命令
测试命令会基于替换命令的输出跳转到一个标签,而不是基于地址跳转的一个标签
& 用来代表替换命令中的匹配模式
echo " The cat sleeps in his hat ."| sed ‘s/.at/"&"/g‘
The "cat" sleeps in his "hat" .
n标签:(读取下一行,会覆盖模式空间的内容)
sed -n ‘1{n;p}‘ file
N标签:(也是读取下一行,但是它是追加)
sed ‘{N;s/rhce/rhca/};{s/rh\nce/rh\nca/}‘ file
D:删除多行组中的一行
P:打印多行组中的一行
保持空间:x:模式空间和保持空间的内容互换,最开始保持空间为空,读取的内容都
到模式空间进行处理,打印这个操作也要到模式空间来完成的:
h:把模式空间的内容拷贝到保持空间(覆盖)
H:把模式空间的值追加到保持空间去(追加)
g:把保持空间的内容写入模式空间(覆盖)
G:把保持空间的内容写入模式空间(追加)
root@ubuntu:/shiyan# cat sedshiyan
aoguofu
jingli
limeng
zongjian
jige
zongjian
huzong
jingli
sed -n -e ‘/jingli/!h‘ -e ‘/jingli/{x;p}‘ sedshiyan
sed -n -e ‘x;n‘ -e ‘/jingli/{x;p}‘ sedshiyan ##
##就是找到职位是经理的,并打印他的名字
sed -n -e ‘/jingli/!h‘ -e ‘/jingli/{H;x;s/\n/:/;p}‘ sedshiyan
结果:aoguofu:jingli
huzong:jingli
这样更完美
sed