三剑客之sed 基本使用

5 篇文章 0 订阅
2 篇文章 0 订阅

一.  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     //从第一行开始,步长为2

打印偶数行

sed  -n  '2~2p'   /etc/passwd     //从第二行开始,步长也为2

2.  'd' 删除

删除包含'root'的行

sed '/root/d'   /etc/passwd

删除第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' 取代,c修改一整行,s仅修改某个关键词

将包含root的行替换为xxx

sed '/root/c\xxx' /etc/passwd

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

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

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

sed -n 's/ / /p'   file             搭配用显示替换的那一行

sed的/ / /可以替换为任意符号,如:sed -n 's# # #p'   file

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

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

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

sed  's/bash/BASH/2'  /etc/passwd

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

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

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

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

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

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

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

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

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

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

在每行的行尾添加xxx

sed   's/$/ xxx'  /etc/passwd

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

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

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值