前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Shell三大利器之sed

Shell三大利器之sed

原创
作者头像
入门笔记
修改2021-01-19 10:33:35
2K0
修改2021-01-19 10:33:35
举报
文章被收录于专栏:入门小站入门小站

sed (stream editor)流编辑器也是linux中的一条命令,在shell中经常需要用到的非交互式修改文件内容的命令。sed处理文本是按行处理,也就是读一行处理一行。

sed的常用参数

  • -n 屏蔽默认输出;如果不加-n选项会全部输出文本满足条件的行再重复输出
  • -r 如果使用扩展正则,则需要添加-r选项,默认不支持扩展正则,只支持标准正则
  • -i 直接修改源文件;不加-i只会在屏幕临时输出不会修改源文件,一般测试过命令无误才会在脚本中使用-i选项

sed常用命令

代码语言:txt
复制
a 在当前行后添加一行或多行。多行时除最后一行外,每行末尾需用“\”续行
b lable 分支到脚本中带有标记的地方,如果分支不存在则分支到脚本的末尾。
c 用此符号后的新文本替换当前行中的文本。多行时除最后一行外,每行末尾需用"\"续行
i 在当前行之前插入文本。多行时除最后一行外,每行末尾需用"\"续行
d 从模板块(Pattern space)位置删除行
D 删除模板第一行
i 在当前行上面插入文本。
h 把模板空间里的内容复制到暂存缓冲区
H 把模板空间里的内容追加到暂存缓冲区
g 把暂存缓冲区里的内容复制到模板空间,覆盖原有的内容
G 把暂存缓冲区的内容追加到模式空间里,追加在原有内容的后面
l 列出非打印字符
n 读入下一输入行,并从下一条命令而不是第一条命令开始对其的处理
N 追加下一个输入行到模板块后面并在二者间嵌入一个新行,改变当前行号码。
q 结束或退出sed

r 从文件中读取输入行
! 对所选行以外的所有行应用命令
s 用一个字符串替换另一个 如s/re/string,用string替换正则表达式re。
g 在行内进行全局替换

w 写并追加模板块到file末尾。将所选的行写入文件
W 写并追加模板块的第一行到file末尾。
x 交换暂存缓冲区与模板空间的内容
y 将字符替换为另一字符(不能对正则表达式使用y命令)
p 打印行,常与-n一起用

= 打印当前行号码。
# 把注释扩展到下一个换行符以前
t if分支,从最后一行开始,条件一旦满足或者T,t命令,将导致分支到带有标号的命令处,或者到脚本的末尾。
T 错误分支,从最后一行开始,一旦发生错误或者T,t命令,将导致分支到带有标号的命令处,或者到脚本的末尾。

操作的文本

代码语言:txt
复制
vim rumenz.txt
123
456
789
000
入门
小站
入门小站
001
002
003
004
005

p输出

命令

完整示例

说明

p

sed -n 'p' 1.txt

输出1.txt的所有行

2p

sed -n '2p' 1.txt

输出1.txt的第二行

2,5p

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

输出1.txt的第二行到第五行

2,+5p

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

输出1.txt的第二行和第二行以后的5行

1~2p

sed -n '1~2p' 1.txt

输出第一行,每隔两行输出一行,也就是输出奇数行

2~2p

sed -n '1~2p' 1.txt

输出第二行,每隔两行输出一行,也就是输出偶数数行

/正则/p

sed -n '/^[0-9]/p' 1.txt

输出1.txt以数字开头的行

$=

sed -n '$=' 1.txt

输出1.txt的行数

d 删除

命令

完整示例

说明

2d

sed '2d' 1.txt

删除1.txt的第二行

2,5d

sed '2,5d' 1.txt

删除1.txt的第二行到第五行

2,+5d

sed '2,+5d' 1.txt

删除1.txt的第二行和第二行以后的5行

$d

sed '$d' 1.txt

删除1.txt的最后一行行

/正则/

sed '/^[0-9]/d' 1.txt

删除以数字开始的行

sed '/^[0-9]/!d' 1.txt

删除不是以数字开头的行

^$

sed '^$' 1.txt

删除1.txt的空行

s 替换

命令

完整示例

说明

s/old/new/

sed 's/old/new/' 1.txt

删除1.txt中每行的第一个old都替换成new

s/old/new/2

sed 's/old/new/' 1.txt

删除1.txt中每行的第二个old都替换成new

s/old/new/g

sed 's/old/new/g' 1.txt

删除1.txt中每行的每一个old都替换成new

s/old//

sed 's/old//' 1.txt

删除1.txt中每行的第一个old都替换成空也就是把old删除

s/old/&s/

sed 's/old/&s/' 1.txt

删除1.txt中每行的第一个old都替换成olds &代表前面查找的字符串

4,7s/^/#/

sed '4,7s/^/#/' 1.txt

删除1.txt中4-7行开头加上# 也就是批量添加注释

4,7s/^#an/an/

sed '4,7s/^#an/an/' 1.txt

删除1.txt中4-7行以#an开头的行去掉#

i/a/c插入

命令

完整示例

说明

行号 i

sed '2i123' 1.txt

在1.txt的第二行前面插入123

正则 i

sed '/^[0-9]/i123' 1.txt

在1.txt中所有数字开头的行前面插入123

a

在行后插入

命令格式和i相同

c

替换该行

命令格式和i相同

sed高级应用

命令

完整示例

说明

行号r

sed -i '2r 2.txt' 1.txt

在1.txt中第二行后面插入2.txt的内容

行号,行号r

sed -i '2,5r 2.txt' 1.txt

在1.txt中第二行到第五行每行后面插入一遍2.txt的内容

/正则/r

sed -i '/^[0-9]/r 2.txt' 1.txt

在1.txt中以数字开头的行后每行面插入一遍2.txt的内容

w

sed '2w 3.txt' 1.txt

在1.txt中第二行导出为3.txt的内容

w

sed '2,5w 3.txt' 1.txt

在1.txt中第二行到第五行导出3.txt的内容

/正则/r

sed -i '/^[0-9]/w 2.txt' 1.txt

在1.txt中以数字开头的行导出为3.txt的内容

wx.jpg
wx.jpg

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • sed的常用参数
  • sed常用命令
    • 操作的文本
      • p输出
        • d 删除
          • s 替换
            • i/a/c插入
              • sed高级应用
              领券
              问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档