Shell三剑客之sed

前言:

       Shell三剑客是grep、sed和awk三个工具的简称,因功能强大,使用方便且使用频率高,因此被戏称为三剑客,熟练使用这三个工具可以极大地提升运维效率。

       sed是一个流编辑器,用于对文本进行编辑、替换、删除等操作。sed通过读取、执行和显示三个过程来工作,可以在无交互的情况下实现复杂的文本处理操作。

一、sed命令参数描述

1.sed命令选项

-n 不打印所有行到标准输出
-e 表示将下一个字符串解析为sed命令,如果只传递一个编辑命令给sed,-e选项可以省略
-f 表示正在调用sed脚本文件

2.sed命令定位文本的方法

x                    x为指定行号
x,y                  指定从x到y的行号范围
/pattern/            查询包含模式的行
/pattern/pattern/    查询包含两个模式的行
/pattern/,x          从与pattern的匹配行到x号行之间的行
x,/pattern/          从x号行到与patter匹配的行之间的行
x,y!                 查询不包括x和y行号的行

3.sed编辑命令 

p   打印匹配行
=   打印文件行号
a\  在定位行号之后追加文本信息
i\  在定位行号之前插入文本信息
d   删除定位行
c\  用新文本替换定位文本
s   使用替换模式替换相应模式
r   从另一个文件中读文本
w   将文本写入到一个文件
y   变换字符
q   第一个模式匹配完成后推出
l   显示与八进制ACSII码等价的控制字符
{}  在定位行执行的命令组
n   读取下一个输入行,用下一个命令处理新的行
h   将模式缓冲区的文本复制到保持缓冲区
H   将模式缓冲区的文本追加到保持缓冲区
x   互换模式缓冲区和保持缓冲区的内容
g   将保持缓冲区的内容复制到模式缓冲区
G   将保持缓冲区的内容追加到模式缓冲区

二、sed应用举例

1.sed命令选项举例

sed编辑命令p实现打印匹配行,-n表示不打印所有行

#查看文件全部内容
[root@test02 ~]# cat a.txt 
#sfsd
fsjdf
fdfs

#执行sed命令带-n选项,只打印文本第一行
[root@test02 ~]# sed -n '1p' a.txt 
#sfsd

#执行sed命令不带-n选项,打印文本第一行和文本全部内容
[root@test02 ~]# sed '1p' a.txt    
#sfsd
#sfsd
fsjdf
fdfs

#打印范围行,1到2行
[root@test02 ~]# sed -n '1,2p' a.txt 
#sfsd
fsjdf

#利用/pattern/进行模式匹配,且匹配是大小写敏感的
[root@test02 ~]# sed -n '/fsjdf/p' a.txt    
fsjdf
[root@test02 ~]# sed -n '/sfsd/p' a.txt      
#sfsd

sed -e用法

#-e表示将下一个字符串解析为sed编辑命令,如果只传递一个编辑命令给sed,-e选项可以忽略。
#只有项sed传递多个编辑命令时,-e才有用武之地

#打印行号命令
[root@test02 ~]# sed -n '/sfsd/=' a.txt  
1
[root@test02 ~]# sed -n '/fsjdf/=' a.txt  
2
#打印行的内容及行号
[root@test02 ~]# sed -n -e '/fsjdf/p' -e '/fsjdf/=' a.txt   
fsjdf
2

 sed -f选项

#-f选项只有调用sed脚本文件时才起作用,
#追加文本格式
#sed '指定地址a\追加文本' 操作文件

[root@test02 ~]# cat append.sed 
#!/bin/sed -f
/my/a\
we append a new line

#在my关键字这一行之后追加文本
[root@test02 ~]# ./append.sed a.txt 
#sfsd
what is your name
my name is Andy Law
we append a new line
zhen ta ma caodan!
fsjdf
fdfs


aaaa

2.sed文本定位举例

匹配元字符需使用转义字符“\”

#匹配元字符
[root@test02 ~]# sed -n '/\!/p' a.txt 
zhen ta ma caodan!
#sed命令可以正则表达式可以匹配元字符,$正则中表示行尾,sed中表示最后一行,最后一行为空行
[root@test02 ~]# sed -n '$p' a.txt

#打印1到2行之外的行
[root@test02 ~]# sed -n '1,2!p' a.txt   
my name is Andy Law
zhen ta ma caodan!
fsjdf
fdfs

#打印匹配关键字my到最后一样
[root@test02 ~]# sed -n '/my/,$p' a.txt     
my name is Andy Law
zhen ta ma caodan!
fsjdf
fdfs


aaaa
#打印第2行到my关键字匹配的行
[root@test02 ~]# sed -n '2,/my/p' a.txt 
what is your name
my name is Andy Law

3.sed基本编辑命令举例

插入命令i\

#sed编辑命令插入文本的符号为i\,插入文本的格式为:
sed '指定地址i\插入文本' 输入文件

[root@test02 ~]# cat insert.sed 
#!/bin/sed -f
/my/i\                          
we insert a new line            

[root@test02 ~]# ./insert.sed a.txt 
#sfsd
what is your name
we insert a new line
my name is Andy Law
zhen ta ma caodan!
fsjdf
fdfs


aaaa

修改文本 c\

#sed编辑命令的修改文本符号为c\,格式为:
sed '指定地址c\更换文本' 输入文件

[root@test02 ~]# cat modify.sed 
#!/bin/sed -f
/my/c\
we modify this line
[root@test02 ~]# ./modify.sed a.txt 
#sfsd
what is your name
we modify this line
zhen ta ma caodan!
fsjdf
fdfs


aaaa

删除文本d

#sed编辑命令删除文本符号为d,格式为:
sed '指定地址d' 操作文件

[root@test02 ~]# cat a.txt 
#sfsd
what is your name
my name is Andy Law
zhen ta ma caodan!
fsjdf
fdfs


aaaa
[root@test02 ~]# sed '2d' a.txt 
#sfsd
my name is Andy Law
zhen ta ma caodan!
fsjdf
fdfs


aaaa
#删除最后一行
[root@test02 ~]# sed '$d' a.txt  
#sfsd
what is your name
my name is Andy Law
zhen ta ma caodan!
fsjdf
fdfs
#删除5到最后一行
[root@test02 ~]# sed '5,$d' a.txt 
#sfsd
what is your name
my name is Andy Law
zhen ta ma caodan!

 替换文本s

#sed编辑命令替换文本的符号为s,格式为:
sed 's/被替换文本/新替换文本/[替换选项]' 输入文本

g          表示替换文本中所有出现被替换字符串之处
p          与-n选项结合,只打印替换行
w 文件名   表示将输出定向到一个文件

[root@test02 ~]# sed 's/my/your/' a.txt     
#sfsd
what is your name
your name is Andy Law
zhen ta ma caodan!
fsjdf
fdfs


aaaa

写入一个新的文件

#写入文本符号w,格式为:
sed '指定地址 w 文件名' 操作文件

#将a.txt文件1到3行生成新文件输入到nuw.txt
[root@test02 ~]# sed -n '1,3 w new.txt' a.txt
[root@test02 ~]# cat new.txt 
#sfsd
what is your name
my name is Andy La

[root@test02 ~]# sed -n '/my/ w new.txt' a.txt   
[root@test02 ~]# cat new.txt 
my name is Andy Law
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

藥瓿亭

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值