测试文档

  1. ID Name PHP Linux MySQL Average
  2. 1 Liming 82 95 86 87.66
  3. 1 Liming 82 95 86 87.66
  4. 2 Sc 74 96 87 85.66
  5. 3 Gao 99 83 93 91.66

查询

#打印全部数据和指定的行

  1. [root@kylin236 ~ 12:43:48]# sed '2p' 1.txt
  2. ID Name PHP Linux MySQL Average
  3. 1 Liming 82 95 86 87.66
  4. 1 Liming 82 95 86 87.66
  5. 2 Sc 74 96 87 85.66
  6. 3 Gao 99 83 93 91.66

#只打印要处理的行

  1. [root@kylin236 ~ 12:44:37]# sed -n '2p' 1.txt
  2. 1 Liming 82 95 86 87.66

删除

#删除多行,删除2-4行,

  1. [root@kylin236 ~ 23:11:07]# sed -i '2,4d' 1.txt
  2. [root@kylin236 ~ 23:11:28]# cat 1.txt
  3. me PHP Linux MySQL Average
  4. 3 Gao 99 83 93 91.66

增加

#在某行前面添加 sed ‘行号a 新字符串’ 文件

  1. [root@kylin236 ~ 23:12:22]# sed -i '1a 111' 1.txt
  2. [root@kylin236 ~ 23:12:41]# cat 1.txt
  3. me PHP Linux MySQL Average
  4. 111
  5. 3 Gao 99 83 93 91.66

#在某行后面添加 sed ‘行号i 新字符串’ 文件

  1. sed -i '2i 111' 1.txt 在第二行前面插入chw
  2. //查看当前文档
  3. [root@kylin236 ~ 23:12:41]# cat 1.txt
  4. me PHP Linux MySQL Average
  5. 111
  6. 3 Gao 99 83 93 91.66
  7. [root@kylin236 ~ 23:25:48]# sed -i '2i chw' 1.txt
  8. [root@kylin236 ~ 23:26:22]# cat 1.txt
  9. me PHP Linux MySQL Average
  10. chw
  11. 111
  12. 3 Gao 99 83 93 91.66

改-替换

行替换 行号关键字 c :

命令格式1:sed ‘行号c 新字符串’ 文件

  1. sed -i '2c qwerty' 1.txt
  2. [root@kylin236 ~ 23:29:54]# sed -i '2c qwerty' 1.txt
  3. [root@kylin236 ~ 13:44:27]# cat 1.txt
  4. me PHP Linux MySQL Average
  5. qwerty
  6. 111
  7. 3 Gao 99 83 93 91.66

命令格式2:sed ‘起始行号,终止行号c 新字符串’ 文件

//这里的把第二第三行字符串替换为1234,把第二第三行当成一个整体替换掉了。

  1. [root@kylin236 ~ 07:29:21]# sed -i '2,3c 1234' 1.txt
  2. [root@kylin236 ~ 07:37:56]# cat 1.txt
  3. me PHP Linux MySQL Average
  4. 1234
  5. 3 Gao 99 83 93 91.66

替换某个具体的字符串 关键字:

‘s/原字符串/新字符串/‘
‘s/原字符串/新字符串/g’
g表示是不是全部要替换,没有g只匹配第一个,有行号就匹配当前行第一个,没有行号就匹配所有行第一个能找到的字符串

测试文档

  1. [root@kylin236 ~ 13:46:12]# cat 1.txt
  2. cwerty
  3. chw
  4. 111
  5. ch1
  6. cccc

命令格式1:sed ‘4s/原字符串/新字符串/‘ 文件

加了行号,不加g,表示匹配指定行的第一个

  1. [root@kylin236 ~ 14:19:07]# cat 1.txt
  2. cwerty
  3. chw
  4. 111
  5. ch1
  6. cccc
  7. [root@kylin236 ~ 14:19:58]# sed -i '4s/h/c/' 1.txt
  8. [root@kylin236 ~ 14:20:01]# cat 1.txt
  9. cwerty
  10. chw
  11. 111
  12. cc1
  13. cccc


命令格式2:sed ‘s/原字符串/新字符串/g’ 文件-

加了行号,加了g,表示替换文本中所有匹配的字符

  1. [root@kylin236 ~ 14:20:01]# cat 1.txt
  2. cwerty
  3. chw
  4. 111
  5. cc1
  6. cccc
  7. [root@kylin236 ~ 14:20:05]# sed -i 's/1/d/g' 1.txt
  8. [root@kylin236 ~ 14:21:06]# cat 1.txt
  9. cwerty
  10. chw
  11. ddd
  12. ccd
  13. cccc

命令格式3:sed ‘s/原字符串/新字符串/‘ 文件

如果不加行号只有s,也不加g,表示匹配所有行的第一个

  1. [root@kylin236 ~ 14:21:06]# cat 1.txt
  2. cwerty
  3. chw
  4. ddd
  5. ccd
  6. cccc
  7. [root@kylin236 ~ 14:21:08]# sed -i 's/c/1/' 1.txt
  8. [root@kylin236 ~ 14:22:54]# cat 1.txt
  9. 1werty
  10. 1hw
  11. ddd
  12. 1cd
  13. 1ccc

命令格式4:sed ‘3s/原字符串/新字符串/g’ 文件

加了行号也加了g,就替换这行所有匹配的内容

  1. 命令格式3sed 's/原字符串/新字符串/' 文件
  2. [root@kylin236 ~ 14:22:54]# cat 1.txt
  3. 1werty
  4. 1hw
  5. ddd
  6. 1cd
  7. 1ccc
  8. [root@kylin236 ~ 14:24:17]# sed -i '3s/d/1/g' 1.txt 把第三行中所有的d都换成1
  9. [root@kylin236 ~ 14:24:25]# cat 1.txt
  10. 1werty
  11. 1hw
  12. 111
  13. 1cd
  14. 1ccc

多条件操作 -e 指令

#替换多行

  1. sed -e '2c 333' -e '3c 444' 1.txt
  2. //查看当前文档
  3. [root@kylin236 ~ 07:37:56]# cat 1.txt
  4. qwerty
  5. qhw
  6. 111
  7. qh1
  8. qccc
  9. [root@kylin236 ~ 07:41:26]# sed -i -e '2c 333' -e '3c 444' 1.txt
  10. [root@kylin236 ~ 07:41:33]# cat 1.txt
  11. qwerty
  12. 333
  13. 444
  14. qh1
  15. qccc

#替换第二行和全局字符串

  1. sed -i -e '2c 222' -e 's/1/5/g' 1.txt 替换第二行内容 同时替换全局所有 数字为1的字符替换成5
  2. [root@kylin236 ~ 07:47:22]# cat 1.txt
  3. 111
  4. 222
  5. 444
  6. qh1
  7. qqqq

#替换全局多个字符串

  1. sed -e 's/66/99/g ; s/qq/ss/g' 1.txt ---这个加-e 和不加-e 都效果都一样

正则应用

在第四行的行首加入#号

sed ‘4s/^/#/g’ 1.txt

删除行尾空格

删除字符串只能用 s/cc//g 的方式让指定的字符串为空
sed -i ‘s/ $//g’ test