一、参数说明

  1. -r 读取扩展正则符号
  2. -n 取消默认输出
  3. $ 表示最后一行信息
  4. \n 换行符
  5. -i 真正修改文件数据内容
  6. !p 表示对输出的内容信息进行取反
  7. -e 读取多个指令信息
  8. -i.bak 先备份后修改
  9. 指令信息
  10. p 输出显示内容信息(np要联用)
  11. a 在一行之后添加信息
  12. i 在一行之前添加信息
  13. c 整行内容进行修改
  14. d 整行内容进行删除
  15. s###g 对文件内容进行替换修改,单双引号都可以

-i 参数使用注意事项

  1. -i参数一定写在所有参数最后
  2. -i参数在使用时一定不能和-n参数结合使用

二、使用方法

1.1 单行查询

1.1.1 根据内容进行过滤

sed -n ‘/Alex/p’ person.txt
103,Alex,COO

1.1.2 按照行号进行过滤

sed -n ‘3p’ person.txt
103,Alex,COO

1.2 多行查询

1.2.1 按照行号进行过滤

  1. sed -n '2,4p' person.txt 进行多行匹配(连续的)
  2. sed -n '3p;6p' person.txt 进行多行匹配(不连续的)

1.2.2 按照内容进行匹配

  1. 进行多行匹配(连续的)
  2. sed -n '/oldboy/,/yy/p' person.txt
  3. 101,oldboy,CEO
  4. 102,zhaoyao,CTO
  5. 103,Alex,COO
  6. 104,yy,CFO
  7. 进行多行匹配(不连续的)
  8. sed -n '/Alex/p;/feixue/p' person.txt

1.2.3 过滤空行信息

sed -n ‘/^$/!p’ person.txt

2、增加信息

2.1 按照行号增加

2.1.1 向指定行的前面增加信息

  1. sed -i '4i oldgirl01' person.txt
  2. 101,oldboy,CEO
  3. 102,zhaoyao,CTO
  4. 103,Alex,COO
  5. oldgirl01
  6. 104,yy,CFO
  7. 105,feixue,CIO
  8. 106,yy,CFO

2.1.2 向指定行的后面增加信息

sed -i ‘4a oldgirl’ person.txt
101,oldboy,CEO
102,zhaoyao,CTO
103,Alex,COO
104,yy,CFO
oldgirl
105,feixue,CIO
106,yy,CFO

2.1.3 向指定行的后面增加多行信息

sed -i ‘4a oldgir1\noldgirl2’ person.txt
101,oldboy,CEO
102,zhaoyao,CTO
103,Alex,COO
104,yy,CFO
oldgirl
oldgir2
105,feixue,CIO
106,yy,CFO

2.1.4 添加多行内容

sed -e ‘3a oldboy03’ -e ‘5a oldboy04’ person.txt

2.1.5 文件末行添加信息

  1. sed -i '$a oldgirl01\noldgirl02' person.txt
  2. 101,oldboy,CEO
  3. 102,zhaoyao,CTO
  4. 103,Alex,COO
  5. 104,yy,CFO
  6. 105,feixue,CIO
  7. 106,yy,CFO
  8. oldgirl01
  9. oldgirl02

2.2 按照内容增加

2.2.1 指定内容后添加信息

sed -i ‘/Alex/a oldgirl02’ person.txt
101,oldboy,CEO
102,zhaoyao,CTO
103,Alex,COO
oldgirl02
104,yy,CFO
105,feixue,CIO
106,yy,CFO

3、删除信息

3.1按照行号进行单行或多行删除

sed -i ‘4d’ person.txt
sed -i ‘3,4d’ person.txt
sed -i ‘3d;5d’ person.txt

3.2 按照信息进行单行或多行删除

sed -i ‘/feixue/d’ person.txt
sed -ri ‘/Alex|feixue/d’ person.txt(不连续)
sed -i ‘/oldboy/,/yy/d’ person.txt(连续)

3.3 删除文件空行信息

sed ‘/^$/d’ person.txt

3.4 先备份后删除

sed -ri.bak ‘/Alex|feixue/d’ person.txt

4、修改信息

4.1 单行进行整体修改

sed -i ‘5c oldboy’ person.txt
sed -i ‘/^user/c user www;’ /etc/nginx/nginx.conf 替换以user开头的行

4.2 多行进行整体修改

sed -e ‘3c oldboy’ -e ‘6c oldgirl’ person.txt

4.3 按照指定行进行部分替换

sed -i ‘4s#Alex#goodman#g’ person.txt

4.4 根据内容进行部分替换

sed -i ‘/103/s#Alex#goodman#g’ person.txt
sed -i ‘s#oldboy#oldgirl#g’ oldboy.txt

4.5 sed后向引用前向

  1. echo 123456|sed 's#123456#<123456>#g'
  2. <123456>
  3. echo 123456|sed -r 's#(.*)#<\1>#g'
  4. <123456>
  5. echo 123456|sed 's#.*#<&>#g'
  6. <123456>
  7. echo 123456|sed 's#.*#&#g'
  8. 123456
  9. echo 123456|sed -r 's#(..)(..)(..)#<\1><\2><\3>#g'
  10. <12><34><56>