linux 中sed的用法详解

本文深入解析SED文本处理工具的使用方法,包括基本语法、常用命令如p打印、d删除、w写入、s替换,以及正则表达式和特殊标记的应用。通过实例演示如何进行文本过滤、转换和操作。

sed 是操作,过滤和转换文本内容的强大工具,sed可以从文件和管道中读取输入。

sed 命令语法
sed [ option ] {sed -commands} {input -file}
-e :执行多个sed命令
-n :只显示操作行
-i :修改目标文件内容
sed每次都从目标文件读取一行记录,并在该记录上执行sed -commands 命令 直到最后一行结束

p 打印命令

命令p 可以控制只输出你指定的内容 通常使用p时,还需要使用-n选项来屏蔽sed 的默认输出 ,否则当执行命令p时,每行记录会输出两次。

地址范围 可用~
如 n~m 表示从第 n 行开始,每次 跳过 m 行:
1~2 匹配 1,3,5,7,……
2~2 匹配 2,4,6,8,……
1~3 匹配 1,4,7,10,……
2~3 匹配 2,5,8,11,……

sed -n  ‘p’  filename   #打印所有行
sed  -n  ‘2p’  filename    #打印第二行
sed   -n   ‘1,4p’ filename   #打印1-4行 
sed   -n  ‘2,$’ filename    #打印
sed -n  ‘2~3 p’  filename    #打印2,5,8,11 等行
sed  -n  ‘/jam/p’ filename   #打印匹配到jam的所有行
  sed  -n  ‘/jam/,4 p’ filename   #打印第一次匹配jam的行至第四行的内容
  sed  -n  ‘/jam/,$ p’ filename    #打印第一次匹配到jam的行到最后所有行
  sed  -n  ‘/jam/,/wa/ p’   filename   #打印匹配jam的行开始到jane的行之间的所有内容

**d 删除 命令 **
注意 :不加 i 参数 ,源文件内容不变。

sed  ‘2d’  filename   #删除第二行
sed   ‘1,4d’  filename  #删除1到4行
sed   ‘2,$d’  filename   #删除第二行到最后一行
sed   ‘1~2 d’  filename    #删除奇数行
sed    ‘/amn/d’ filename    #删除匹配amn 的行
sed   ‘/amn/,4 d’ filen	   #删除匹配jason的行至第四行
sed   ‘/ar/,$ d’ filename  #删除第一次匹配到ar的行到最后一行
sed   ‘/ar/,+2 d’ filename #删除第一次匹配到ar的行和紧跟它后面的两行
sed   ‘/^$/d’ filename    #删除空行

w 写入命令

命令w 可以把一个文件内容保存到另一个文件当中

sed  ‘w   1.txt’         2.txt        #把2.txt的内容保存到1.txt  同时显示在屏幕上若1.txt 文件中有内容 ,则会覆盖
sed  -n    ‘w   1.txt’   2.txt        #同上功能 只是不再屏幕上显示
 sed -n    ‘2w   1.txt’  2.txt        #只保存第二行
 sed -n    ‘1,4w   1.txt’   2.txt    #只保存1到4行
 sed  -n   ‘2,$w   1.txt’   2.txt    #保存第二行至最后一行
 sed  -n   ‘1~2 w   1.txt’   2.txt    #保存奇数行
sed  -n   ‘/jame/w   1.txt’   2.txt   #保存匹配到jame的行
 sed  -n   ‘/jasm/,4 w   1.txt’   2.txt   #保存第一次匹配jasm的行至第四行
  sed  -n   ‘/sxd/,/ddd/ w   1.txt’   2.txt  #保存匹配sxd至匹配ddd 的行
                    

**S 替换命令 **

sed  ‘s/ddd/sxd/’   filename     #用sxd替换文件中每行当中第一个ddd
sed  ‘/ddd/s/sxd/vvv/’   filename  #用vvv替换包含ddd中行中第一个sxd
 
**g 全局标记 **
sed  ‘s/ddd/sxd/g’   filename   #用sxd替换含有ddd的所有行中所有的ddd

**1 2 3 数字标记 **
sed  ‘s/ddd/sxd/2’   filename   #替换第二个ddd

p 打印标记

sed   -n  ‘s/sxd/ddd/p’  filename  #打印替换后的行
sed    -n  ‘s/sxd/ddd/2 p’  filename  #把每行中第二次出现sxd替换为ddd打印出来

w 写标记

sed -n 's/John/Johnny/w output.txt' employee.txt    #将替换后的内容写到 outout。txt 中

i 忽略大小写

sed 's/john/Johnny/i' employee.txt   #把 john 或 John 替换为 Johnny

&的作用

 sed 's/^[0-9][0-9][0-9]/[&]/g' employee.txt   #给雇员 ID(即第一列的 3 个数字)加上[ ],如 101 改成[101]
 sed 's/^.*/<&>/' employee.txt               #把每一行放进< >中

正则表达式

sed -n '/^103/ p' employee.tx     #匹配103开头的行并打印
 sed -n '/r$/ p' employee.txt      #匹配r结尾的行并打印
 
  匹配0到任意多次(*)
  sed -n '/log: *./p' log.txt         #匹配包含log并且log后面有信息的行
  
  匹配1到多次 (\+)
  sed -n '/log: \+/ p' log.txt       #匹配log后面有一个或者多个空格的行
  
  匹配0次或者1次 前面的字符
  sed -n '/log: \?/ p' log.txt        #匹配log后面没有空格或者有一个空格的行
  
  转义字符 ( \ )
 sed -n '/127\.0\.0\.1/ p' /etc/host   #匹配含有127.0.0.1的行并打印
 
 字符集 ( [0-9] ) 
 sed  -n  ‘/[123]/ p'    filename   #匹配含有1或2或3的行 并打印

 

a 追加命令

 sed '2 a 203 ' employee.txt    #在第二行加入203
  sed '$ a 203' employee.txt    #在结尾加入203
  sed  ‘/sxd/ a 123’  filename    #在匹配到sxd的行后加入123
  

i 插入命令

和追加命令a 用法一样,只是在前一行插入

c 修改命令

sed '2 c 202' employee.txt          #用202替代第二行

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值