1.参数

p==print 
d:delete
=:打印匹配行的行号
-n 取消默认的完整输出,只要需要的  
-e 允许多项编辑
-i 修改文件内容
-r 不需要转义
动作
a\  在当前行后添加一行或多行。多行时除最后一行外,每行末尾需用“\”续行
c\  用此符号后的新文本替换当前行中的文本。多行时除最后一外,每行末尾需用"\"续行
i\  在当前行之前插入文本。多行时除最后一行外,每行末尾用"\"续行
d   删除行
h   把模式空间里的内容复制到暂存缓冲区
H   把模式空间里的内容追加到暂存缓冲区
g   把暂存缓冲区里的内容复制到模式空间,覆盖原有的内容
G   把暂存缓冲区的内容追加到模式空间里,追加在原有内容的后面
l   列出非打印字符
p   打印行
n   读入下一输入行,并从下一条命令而不是第一条命令开始对其处理
q   结束或退出sed
r   从文件中读取输入行
!   对所选行以外的所有行应用命令
s   用一个字符串替换另一个
g   在行内进行全局替换
w   将所选的行写入文件
x   交换暂存缓冲区与模式空间的内容
y   将字符替换为另一字符(不能对正则表达式使用y命令)

2.作用范围

数字匹配范围
sed -n '1p' 123.txt
#-n只显示匹配到的,不加-n会显示123.txt的所有内容在加上匹配到的
#'1p'  数字表示范围,1就表示匹配第一行 ,p表示动作 打印的意思
sed -n  '1,3p' 123.txt 
#执行结果打印1到第3行
正则匹配范围
sed -n '/^111/,/^333/p' 123.txt
#上面两个正则表示范围,打印从第一个匹配到"111"到最后一个匹配到"333"的中间的内容
实战语句:
sed -n '/2019-11-24 13:/,/2019-11-24 23:/p' mysqld.log
#打印出,mysql日志的 2019-11-24 13点到23之间的日志

混合组合匹配范围
sed -n '/^111/,4p' 123.txt
#表示从匹配到"111"的行一直到第4行打印出来

sed -n -e 's/111.*/kkk/' -e '1,2p' 123.txt
#-e 多项编辑,表示先把匹配到111.*的替换成kkk,在打印出1到2行
sed -n -e '1,5p' -e = 123.txt
#显示第1到第5行,并且显示行号     "="是显示行号的

sed  '/^111/r 233.txt'  123.txt
#动作r的使用,将匹配到111的行后面追加 233.txt文件的内容,最后把结果输出出来

sed  '/^111/w 244.txt'  123.txt
#将匹配到的111的行写入到244.txt文件当中,了解就行多此一举的操作,重定向更好使

3.增删改

添加
sed '/^111/i kkk\njjj' 123.txt
#匹配到111的行前面添加"kkk\njjj" 字符 \n 表示回车,这段字符会分两行添加
sed '/^111/a kkk' 123.txt
#对匹配到的 在后面添加字符
删除
sed '/^222/d' 233.txt
#删除匹配到行首是222的整行
sed '/^222/{n;d}' 233.txt 
#删除匹配到行首是222的下一行
sed  -e '$!N;/\n.*222/!P;D' 233.txt
#删除匹配的上一行,注意这边在shell里面要用单引号,双引号会报错,但是到了脚本里就可以用双引号了,可以使用变量了

修改
sed 's/^1.*1/kkk/' 233.txt
#表示已行首为1中间任意字符任意个最后一结尾为1的,替换成kkk,替换词
sed 's/^111.*/kkk/' 233.txt
#表示已行首为111的后面字符都任意的,替换成kkk,用于替换一整
行


替换指定的行
sed '3,3s/.*/ooo/' 233.txt
#表示作用范围只在第3行,.* 表示任意字符都能匹配上最后替换为ooo

4.高级用法

echo "ABCDaS" | sed 's#[a-Z]#\l&#g'
##大小写转换,l换成u小写转大写 加g表示全部替换,不加g只替换第一个字母

ldd /bin/ls|sed -r  's#.*(/lib64/.* ).*||.*#\1#'
#匹配ls的所有库文件,原理就是把一整行给匹配出来,()是复制的意思,里面就是需要的数据,最后把整行替换成()的数据。 \1的意思就是黏贴前面()里的数据.
#||.*     ||是或者的意思,因为第一行没有/lib 开头的是匹配不到前面的正则,所以用.*给它匹配到替换掉,又因为前面的正则没匹配到所以()里的数据为空,后面\1也就替换成了空 
ldd /bin/ls|grep -o [^[:space:]]*/lib[^[:space:]]*
#grep的匹配方法

5.正则符号的意思