Linux sed命令详解-结构(清楚结构便于理解记忆)-选项-模式空间与暂存区(多示例、多图)

sed基本结构

sed 选项 [模式1][,模式2] [动作][flag] filename

模式指的是Addresses,有的朋友也会把它直译为地址。

sed的格式非常灵活,导致有时候可读性不好,不信看:

sed '1croot' sed.txt

上面这个命令简单吧,如果对sed不熟悉,晃眼可能还得愣2秒才能反应过来。

所以,我们想要一眼就可能知道sed在干什么,就一定要清楚sed结构。

我们先来看一个简单的例子,说明一下结构。

# -n是选项表示使用静默模式, '2,5p'是动作表示打印2到5行 sed.txt是要处理文件
sed -n '2,5p' sed.txt

上面这个命令也非常简单,但是它几乎包含了sed的全部结构,我们在它的基础上稍微变一下,还能一眼看穿吗?

sed '1~2p' sed.txt
sed  '1,5s/aa/zzzz/g' sed.txt
sed '2s/aa/AA/2' sed.txt
sed '/aa/s/aa/AA/2' sed.txt
sed '/^luck/,+3s/luck/LUCK/g' sed.txt
sed -n '/2024-10-13 06:52:48/,/2024-10-13 06:53:21/w app.log.bak' app.log

我们只要理解结构,就会发现万变不离其中:

Linux sed命令结构

模式部分,我们总结一下:

模式可以包含2部分,表示匹配的区间,模式有下面几种格式:

模式格式 示例说明
n,m sed ‘3,5p’ sed.txt,表示只打印区间3-5行
n sed ‘5p’ sed.txt,表示只打印第5行,可以看做是sed ‘5,5p’ sed.txt的简写
n,+m sed ‘3,+5p’ sed.txt,表示只打印区间3-8行,可以看做是sed ‘3,8(3+5)p’ sed.txt
/xxx/ sed ‘/luck/’ sed.txt,表示包含luck的行
/xxx/,/yyy/ sed ‘/luck/lovely/’ sed.txt,表示打印区间,从包含luck的行开始,到包含lovely的行结束

模式都是上面的组合,如:

  1. /xxx/,10
  2. /xxx/,+3
  3. 3,/xxx/
  4. /xxx/,/yyyy/
  5. 3,5
  6. 3,+5
  7. 3,$:3到最后一行
  8. /xxx/,~3
  9. 1,~3
  10. 1~3:这个特殊,可以看做初始值1,步长3直到sed行结尾,注意和上2个的区别(文章最后)

选项

选项 说明
-n slient静默模式,不输出原来的行,通常与p一起使用
-e 多点编辑
-f 指定sed命令脚本,-f filename则可以执行filename内的sed动作
-i 直接修改读取的文件内容,而不是输出print,危险危险
-E 使用扩展表达式
-r 和-E等价,表示使用扩展正则表达式

关于扩展正则表达式,可以参考:Linux grep命令详解(多图、多示例)

-n(静默模式)

sed '2,5p' sed.txt
sed -n '2,5p' sed.txt

Linux sed n参数

-e、;(多点编辑,多条命令)

# 打印2到5号,打印每行行号
sed -n -e '2,5p' -e '=' sed.txt

# 除了-e还可以使用分号(;),等价于上一个命令
sed -n '2,5p;=' sed.txt

# 打印第4行和最后一行
sed -n '4;$p' sed.txt

Linux sed e参数
不知道你有没有发现,-e参数和;指定的命令模式不同,相当于都是独立的指令,如果我们要对同一个模式匹配,做多个动作,怎么办呢?

注意下面2个命令的区别:

# 这相当于是2个指令,按行读取,分别执行2个指令
sed -n '2,5p;=' sed.txt

# 这是相当于1个指令,2个动作,对于2到5行这个模式匹配,分别打印和输出行号
sed -n '2,5{p;=}' sed.txt

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值