sed使用详解

sed使用详解

注:因为sed的版本不同,参数和用法会写些许不同。

sed功能说明

sed的全称为stream editor,主要功能为增删改查,取行和过滤功能

语法格式

sed [options] [sed-commands] [input-file]
sed 选项 sed命令 输出文件

sed语句:
sed软件:
input-file:可以是文本,也可以是标准输入

sed软件执行流程:
1.读入一行文本到模式空间(sed软件内部的一个临时缓存区);
2.判断是否是要处理的行;是则处理,否则回到第一步重新执行;
3.执行sed命令;
4.打印模式空间并清空模式空间,输出到屏幕或指定的位置;
5.回到第一步继续执行知道处理完所有行。
指定执行的地址范围:
n/m,n/m,+n/1~2(1,3,5…,1为起始行,2为步长)/10, ( 10 , 到 最 后 一 行 ) s e d − c o m m a n d s / s t r i n g / ( 包 含 s t r i n g 的 行 ) s e d − c o m m a n d s / s t r i n g 1 / , / s t r i n g 2 / ( 包 含 s t r i n g 的 行 , 到 包 含 s t r i n g 2 的 行 ) s e d − c o m m a n d s / s t r i n g / , (10,到最后一行){sed-commands} /string/(包含string的行){sed-commands} /string1/,/string2/(包含string的行,到包含string2的行){sed-commands} /string/, 10sedcommands/string/(string)sedcommands/string1//string2/(string,string2)sedcommands/string/(包含string的行到结束){sed-commands}
/string/,+20(包含string的行到其后的20行){sed-commands}

1. 选项说明

[options] 选项
-i:对原文件进行操作,可以再-i参数后面加 .扩展名 的方式备份源文件
-n:取消默认输出
-f:后面接sed脚本文件名
-r : 使用扩展正则表达式
-e:执行多条sed命了
[sed-commands] sed 命令

1.1 增加

1.1.1 单行增加

a(add):追加 sed ‘na string’ filename;n为行号,在其后添加,string为添加的内容,filename为操作的文件名
i(insert):插入 sed ‘na string’ filename;n为行号,在其前插入,string为插入的内容,filename为操作的文件名

1.1.2 多行增加

a(add):追加 sed ‘na string1\n string2’ filename;
i (insert):插入 sed ‘na string1\n string2’ filename;
不会改变原文件的内容

1.2 删除

d (delete):sed ‘[n/m,n]d’ filename

1.3 改

1.3.1 按行替换

c:替换指定的行 sed ‘nc string1’ filename;
不会改变原文件的内容

1.3.2 按字符串替换

s:替换指定的字符串 g 是s命令的替换标志-表示全局替换

sed的替换模型:sed -i ‘s# string1 # string2 #g/s/ string1 / string2 /g’ filename:s表示替换,string1被替换的字符串,string2表示替换后的字符串,filename为操作的文件。此命令会改变原文件的内容。
sed ‘s# string1 # string2 #g/s/ string1 / string2 /g’ filename,此命令不会改变原文件的内容。

1.3.3 分组替换

echo ‘I am lt.’ | sed 's#^.am([a-z].) l.*KaTeX parse error: Expected 'EOF', got '#' at position 7: (匹配内容)#̲\1#g' : 详解后面…#中()内的内容。一个sed命令中可以有多个(),均可用\2表示对应的()内匹配的内容,但是最多只能有九个。

1.3.4 启动项优化

chkconfig --list|grep 3:on|grep -vE “sshd|crond|network|rsyslog|sysstat(系统启动项)”|awk ‘{print $1}’|sed -r ’ s#(.*)#chkconfig \1 off#g’|bash

1.3.5 特殊符号& 代表被替换的内容

sed ‘n,m s#string#–&--#g’ filename

1.4 查

p:打印出指定 的内容,一般与-n选项一起连用

g :s命令的替换标志
eval sed ‘s#KaTeX parse error: Expected 'EOF', got '#' at position 2: x#̲y#’ filename 通用可以执行完成,因为eval会先将$解析出来再执行sed命令。

1.5 另存

w 另存文件:sed ‘s#string1#string2# w newfilename’ sourcefilename
只是把选中的行添加到newfilename中。

1.6 替换命令详解

sed ‘[address-rangle] | [parrern-range] s#original-string#replacement-string#[substitute-flags]’ [input file]
sed ‘[地址范围] | [模式范围] s#[被替换的字符串]#[替换后的字符串]#[替换标志]’ [输入文件]

1.6 替换标志Ms # # #Ng

1.6.1 Ms # # #Ng

Ms 对第M行操作,无g标志,对匹配的第一列操作,有g对整行进行操作;
Ng 对从第N处匹配的列开始替换;
Ms Ng 对第M行从第N处匹配开始替换

1.6.2 数字标志X

1<x<512
X只对第X处匹配的列替换

1.6.3 写标志w

sed ‘s#string1#string2#w output.txt’ persion.txt
sed ‘s#string1#string2# w output.txt’ persion.txt 写标志,只会写替换的行
sed ‘s#string1#string2#;w output.txt’ persion.txt 写命令,将替换后的整个文件写入到新文件中

1.6.4 忽略大小写标志i

sed ‘s#string1# string2#ig’ sourcefile

1.6.5 执行命令e

sed ‘s#^#ls -lh#e’ sourcefile

1.6.6 其他替换标志

\l 在替换字符中使用\l标志时,他会把紧跟在其后面的字符当作小写字符来处理。
\L在替换字符中使用\L标志时,他会把紧跟在其后面的字符都当作小写字符来处理。
\u在替换字符中使用\u标志时,他会把紧跟在其后面的字符当作大写字符来处理。
\U在替换字符中使用\U标志时,他会把紧跟在其后面的字符都当作大写字符来处理。
\E需要和\U和\L一切使用,它将关闭\U和\L的功能。
特殊符号 “=” 获取行号 sed ‘=’ sourcefile

1.7一条sed语句执行多条sed命令

删除第三行到末尾的数字,并把10替换为01
sed ‘3.KaTeX parse error: Expected 'EOF', got '#' at position 23: …cefile | sed 's#̲10#01#g' sour…d’ -e ‘s#10#01#g’ sourcefile
sed ‘3.$d;s#10#01#g’ sourcefile
sed -f file.sed(sed 命令) sourcefile

例:去除某文件中指定的行
sed -n ‘5p;70p;150p’ sourcefile

1.8 {}的用法

sed -n ‘2,4{p:=}’ sourcefile 对2-4行先执行p命令,然后执行=命令
l 打印不可见字符 sed ‘l’ sourcefile

1.9 转换字符y

tr ‘abc’ ‘ABC’ sourcefile 将a换成A,b换成B,c换成C
sed ‘y#abc#ABC#g’ sourcefile 同上
q 退出q命令,遇到匹配的内容就停止读取,只能使用一个地址
sed ‘3q’ sourcefile
r 从另外一个文件读数据,追加到文件中,类似于合并两个文件
sed ‘r sourcefile’ destfile

1.10 保持空间和模式空间

Sed软件有两个内置的存储空间:
模式空间(pattern space):是sed软件从文件读取一行文本然后存入的缓冲区,然后命令操作模式空间的内容。
保持空间(hold space):是sed软件另外一个缓冲区,用来存放临时数据。Sed可以交换模式空间和保持空间的数据,但是不能再保持空间上执行普通的sed命令。
初始情况,模式空间和保持空间都是没有内容的。每次循环读取数据的过程中,模式空间 内容都会被清除写入新的内容,但是保持空间的内容保持不变,不会在循环中被删除,除非sed命令操作保持空间。

模式空间:
n 清空当前模式空间,读入下一行 sed ‘n;p’ sourcefile 只打印偶数行
N 不清空当前模式空间,读入下一行,以\n分隔两行 sed ‘=’ sourcefile | sed ‘N:s#\n# #g’ 在文件中添加行号

保持空间:
x 用保持空间替换模拟空间
h 把模拟空间的内容复制到保持空间
H 把模式空间的内容追加到保持空间
g 把保持空间的内容复制到模式空间
G 把保持空间的内容追加到模式空间

1.11 操作多个文件

sed ‘N;s#\n# #g’ sourcefile1 sourcefile2

1.12模拟其他命令

模拟cat
sed ‘’ sourcefile
sed -n ‘p’ sourcefile
sed ‘s# # #’ sourcefile
sed ‘N’ sourcefile
sed ‘n’ sourcefile

模拟grep
sed -n ‘/string/p’ sourcefile
sed -n '/string/ !p ’ sourcefile grep -v

模拟head
sed -n ‘1,2p’ sourcefile
sed ‘2q’ sourcefile

wc命令
sed -n ‘$=’ sourcefile

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值