三剑客之sed 基本使用

一.  sed是一种流编辑器,在文本处理中非常有用。在shell等脚本文件中,可以使用sed来对文件进行替换编辑等操作。处理时,把当前处理的行存储在临时缓冲区中,称为『模式空间』(pattern space),接着用sed命令处理缓冲区中的内容,处理完成后,把缓冲区的内容送往屏幕。接着处理下一行,这样不断重复,直到文件末尾。文件内容并没有改变,除非你使用重定向存储输出。sed主要用来自动编辑一个或多个文件,简化对文件的反复操作,编写转换程序等

二. 参数说明

  • a :追加, a 的后面可以接字串,而这些字串会在当前行的下一行
  • c :取代, c 的后面可以接字串,这些字串可以取代 n1,n2 之间的行
  • d :删除,因为是删除,所以 d 后面通常不加任何内容
  • i :插入, i 的后面可以接字串,而这些字串会在当前行的上一行(取代当前行的行号)
  • p :打印,亦即将某个选择的数据印出。通常 p 会与参数 sed -n 一起运行
  • s :替换,对字符串进行处理,通常这个 s 的动作可以搭配正规表达式,例如 1,20s/old/new/g

三. 操作实例

1. 'p' 打印,打印通畅与-n选项连用,只显示匹配内容

打印第1行

sed -n '1p' /etc/passwd

打印1到10行

sed -n  '1,10p'  /etc/passwd

打印倒数第一行

sed  -n '$p'  /etc/passwd

打印包含'root'的行

sed  -n  '/root/p'  /etc/passwd

打印奇数行

sed  -n  '1~2p'   /etc/passwd

打印偶数行

sed  -n  '2~2p'   /etc/passwd

2.  'd' 删除

删除第10行

sed  '10d'  /etc/passwd

删除最后一行

sed  '$d'  /etc/passwd

删除5到10行

sed  '5,10d'  /etcp/passwd

删除第5行和第10行

sed  '5d;10d'  /etc/passwd

3.'a' 追加

将'this a test line '追加到以root开头的行后

sed  '/^root/a\this a test line'  /etc/passwd

将'this a test line'追加到第5行后

sed  '5a\this a test line'  /etc/passwd

4. 'i'插入

将'this a test line'插入到以root开头的行前

sed  '/^root/i\this a test line '  /etc/passwd

将'this a test line ' 插入到第5行前

sed  '5i\this a test line '  /etc/passwd

5. 'c' 取代

将第5到10行取代为'this a test line'

sed '5,10c\this a test line'  /etc/passwd

6. 's'替换,加 '-i' 选项会直接修改原文件

将文件中每一行的第一个bash替换为BASH

sed  -i  's/bash/BASH/' /etc/passwd  

将文件中所有的bash替换为BASH,加参数 ‘g’

sed   -i  's/bash/BASH/g' /etc/passwd

将文件中包含www那一行所有的1001替换为1002

sed  -i  '/www/s/1001/1002/g' /etc/passwd

将文件中第10行的'bin'替换为'BIN'

sed  -i  '10s/bin/BIN/'  /etc/passwd

将文件中第1到10行中所有的'bin'替换为'BIN'

sed   -i  '1,10s/bin/BIN/g'  /etc/passwd

将文件中最后一行的'bin'替换为'BIN'

sed  -i  '$s/bin/BIN'  /etc/passwd

将passwd文件中倒数第10行中'bin'替换为'BIN'

tac /etc/passwd | sed '10s/bin/BIN/' | tac

猜你喜欢

转载自blog.csdn.net/cainiao_lj/article/details/82108092