注:因为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/, (10,到最后一行)sed−commands/string/(包含string的行)sed−commands/string1/,/string2/(包含string的行,到包含string2的行)sed−commands/string/,(包含string的行到结束){sed-commands}
/string/,+20(包含string的行到其后的20行){sed-commands}
[options] 选项
-i:对原文件进行操作,可以再-i参数后面加 .扩展名 的方式备份源文件
-n:取消默认输出
-f:后面接sed脚本文件名
-r : 使用扩展正则表达式
-e:执行多条sed命了
[sed-commands] sed 命令
a(add):追加 sed ‘na string’ filename;n为行号,在其后添加,string为添加的内容,filename为操作的文件名
i(insert):插入 sed ‘na string’ filename;n为行号,在其前插入,string为插入的内容,filename为操作的文件名
a(add):追加 sed ‘na string1\n string2’ filename;
i (insert):插入 sed ‘na string1\n string2’ filename;
不会改变原文件的内容
d (delete):sed ‘[n/m,n]d’ filename
c:替换指定的行 sed ‘nc string1’ filename;
不会改变原文件的内容
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,此命令不会改变原文件的内容。
echo ‘I am lt.’ | sed 's#^.am([a-z].) l.*KaTeX parse error: Expected 'EOF', got '#' at position 7: (匹配内容)#̲\1#g' : 详解后面…#中()内的内容。一个sed命令中可以有多个(),均可用\2表示对应的()内匹配的内容,但是最多只能有九个。
chkconfig --list|grep 3:on|grep -vE “sshd|crond|network|rsyslog|sysstat(系统启动项)”|awk ‘{print $1}’|sed -r ’ s#(.*)#chkconfig \1 off#g’|bash
sed ‘n,m s#string#–&--#g’ filename
p:打印出指定 的内容,一般与-n选项一起连用
g :s命令的替换标志
eval sed ‘s#KaTeX parse error: Expected 'EOF', got '#' at position 2: x#̲y#’ filename 通用可以执行完成,因为eval会先将$解析出来再执行sed命令。
w 另存文件:sed ‘s#string1#string2# w newfilename’ sourcefilename
只是把选中的行添加到newfilename中。
sed ‘[address-rangle] | [parrern-range] s#original-string#replacement-string#[substitute-flags]’ [input file]
sed ‘[地址范围] | [模式范围] s#[被替换的字符串]#[替换后的字符串]#[替换标志]’ [输入文件]
Ms 对第M行操作,无g标志,对匹配的第一列操作,有g对整行进行操作;
Ng 对从第N处匹配的列开始替换;
Ms Ng 对第M行从第N处匹配开始替换
1
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 写命令,将替换后的整个文件写入到新文件中
sed ‘s#string1# string2#ig’ sourcefile
sed ‘s#^#ls -lh#e’ sourcefile
\l 在替换字符中使用\l标志时,他会把紧跟在其后面的字符当作小写字符来处理。
\L在替换字符中使用\L标志时,他会把紧跟在其后面的字符都当作小写字符来处理。
\u在替换字符中使用\u标志时,他会把紧跟在其后面的字符当作大写字符来处理。
\U在替换字符中使用\U标志时,他会把紧跟在其后面的字符都当作大写字符来处理。
\E需要和\U和\L一切使用,它将关闭\U和\L的功能。
特殊符号 “=” 获取行号 sed ‘=’ sourcefile
删除第三行到末尾的数字,并把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
sed -n ‘2,4{p:=}’ sourcefile 对2-4行先执行p命令,然后执行=命令
l 打印不可见字符 sed ‘l’ sourcefile
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
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 把保持空间的内容追加到模式空间
sed ‘N;s#\n# #g’ sourcefile1 sourcefile2
模拟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