sed进阶用法

1 篇文章 0 订阅

sed进阶用法

sed基本介绍

sed是一种流编辑器,它是文本处理中非常好的工具,能够完美的配合正则表达式使用,功能不同凡响。处理时,把当前处理的行存储在临时缓冲区中,称为“模式空间”(pattern space),接着用sed命令处理缓冲区中的内容,处理完成后,把缓冲区的内容送往屏幕。接着处理下一行,这样不断重复,直到文件末尾。文件内容并没有改变,除非你使用重定向存储输出。Sed主要用来自动编辑一个或多个文件,可以将数据行进行替换、删除、新增、选取等特定工作,简化对文件的反复操作,编写转换程序等

ed数据处理原理

img

sed的选项、命令、替换标记

命令介绍
sed的命令格式:sed [options] 'command' file(s);
 
sed的脚本格式:sed [options] -f scriptfile file(s);

-e :直接在命令行模式上进行sed动作编辑,此为默认选项;

-f :将sed的动作写在一个文件内,用–f filename 执行filename内的sed动作;

-i :直接修改文件内容;

-n :只打印模式匹配的行;

-r :支持扩展表达式;

-h: 或–help:显示帮助;

-V: 或–version:显示版本信息

 a\ 在当前行下面插入文本;
 
 i\ 在当前行上面插入文本;
 
 c\ 把选定的行改为新的文本;
 
 d 删除,删除选择的行;
 
 D 删除模板块的第一行;
 
 s 替换指定字符;
 
 h 复制模式空间的内容到内存中的保存空间;

 g 获得内存缓冲区的内容,并覆盖当前模板块中的文本;
 
 G 获得内存缓冲区的内容,并追加到当前模板块文本的后面;
 
 l 列表不能打印字符的清单;
 
 n 读取下一个输入行,用下一个命令处理新的行而不是用第一个命令;
 
 N 追加下一个输入行到模板块后面并在二者间嵌入一个新行,改变当前行号码;
 
 p 打印模板块的行。 P(大写) 打印模板块的第一行;

基础命令


#a 在当前匹配到的行下面在添加
[root@localhost ~]# cat 123
aaaa
dddd
bbbb
[root@localhost ~]# sed '/a/acccc' 123
aaaa
cccc
dddd
#i 在当前匹配到的文本上一行添加
[root@localhost ~]# cat 123
aaaa
dddd
bbbb
[root@localhost ~]# sed '/a/icccc' 123
cccc
aaaa
dddd
#c 把sed匹配到的文本修改
[root@localhost ~]# cat 123
aaaa
dddd
[root@localhost ~]# sed '/a/c123' 123
123
dddd
bbbb
#d 把sed匹配到的行删除;D同样也是删除匹配到的行,在功能上差不多,但是D他会删除停止在换行符前面。
[root@localhost ~]# cat 123
aaaa
dddd
bbbb
[root@localhost ~]# sed '/a/d' 123
dddd
bbbb

sed模式空间和保持空间介绍

sed 之 模式空间 & 保持空间. 保持空间:作为辅助的一个缓冲区,可以和模式空间进行交互,但是命令不能直接作用于保持空间。. 由上面定义可以知道,模式空间和保持空间是两个独立的缓冲区,可以进行交互,命令可以寻址模式空间但是不能寻址保持空间。. 通过模式匹配到的行被读入模式空间中。. 用来进行进一步的操作;在多行模式中, 'n’可以用来和模式空间 (N命令的结果)的任意换行符匹配,单模式空间底部的换行符除外 。. ^匹配多行的首,$匹配多行的尾,不是每行的行首和行尾。. 可以通过h,H,g,G与模式空间进行交互。

h命令是将当前模式空间中内容覆盖至保持空间;

H命令是将当前模式空间中的内容追加至保持空间

g命令是将当前保持空间中内容覆盖至模式空间,

G命令是将当前保持空间中的内容追加至模式空间

高级命令

n命令
  • 如果test被匹配,则移动到匹配行的下一行,替换这一行的aa,变为bb,并打印该行,然后继续:
[root@localhost ~]# cat 123
test
aa
[root@localhost ~]# sed '/test/{n;s/bb/}' 123
test
bb

N命令

N命令简单来说就是追加下一行到模式空间,同时将两行看做一行,但是两行之间依然含有\n换行符,如果命令未执行成功(并非跳过:前端条件不匹配),则放弃之后任何命令,并对新读取的内容,重头执行sed。

[root@localhost ~]# cat 123
aaaa
dddd

bbbb


cccc




fffff
[root@localhost ~]# sed -n 'N;P' 123
aaaa


cccc


[root@localhost ~]# 

h命令

是将模式空间的内容覆盖到保持空间。

[root@localhost ~]# cat 123
aaaa
dddd
bbbb
cccc
[root@localhost ~]# sed  '/aaaa/{h;d};/bbbb/{G}' 123
dddd
bbbb
aaaa
cccc

H命令

H命令是将当前模式空间中的内容追加至保持空间

[root@localhost ~]# cat 123
aaaa
dddd
bbbb
cccc
[root@localhost ~]# 
#H 是把模式空间的aaaa追加到保持空间里面,然后在匹配一个dddd把他也匹配到模式空间里面,然后G把保持空间里的aaaa追加到dddd后面模式空间也就是下面显示的
[root@localhost ~]# sed '/aaaa/{H;d};/dddd/{G}' 123
dddd

aaaa
bbbb
cccc
g命令

g命令是吧保持空间的内容覆盖到模式空间

[root@localhost ~]# cat 123
aaaa
dddd
bbbb
cccc
# g 可以很明显的看到这里用h把aaaa覆盖到保持空间,然后用g把保空间的aaaa覆盖到模式空间,因为我匹配了一个dddd所以就是覆盖了一个dddd。
[root@localhost ~]# sed '/^a/{h};/^d/{g}' 123
aaaa
aaaa
bbbb
cccc
[root@localhost ~]#
[root@localhost ~]# sed '/^a/{h};/^c/{g}' 123
aaaa
dddd
bbbb
aaaa
[root@localhost ~]# 
G命令

G 命令是吧保持空间的内容追加到模式空间

[root@localhost ~]# cat 123
aaaa
dddd
bbbb
cccc
# G 可以看到h把模式空间的aaaa覆盖到保持空间,也就是说现在保持空间里面有aaaa,然后在匹配cccc,用G将保持空间的aaaa追加到cccc后面。
[root@localhost ~]# sed '/^a/{h};/^c/{G}' 123
aaaa
dddd
bbbb
cccc
aaaa
[root@localhost ~]# 

p和P命令

p 打印模式空间的行。 P(大写) 打印模式空间的第一行;

[root@localhost ~]# cat 123
aaaa
dddd
bbbb
cccc
# 这里匹配到一个aaaa所以p就多打印了一行
[root@localhost ~]# sed '/aaaa/{p}' 123
aaaa
aaaa
dddd
bbbb
cccc
#P 是只打印模式空间的第一行,通常和-n一起用,-n 选项会禁止 sed 输出
[root@localhost ~]# sed -n '/aaaa/{P}' 123
aaaa

y命令

y命令就是把匹配到模式空间的内容替换掉

[root@localhost ~]# cat 123
aaaa
dddd
bbbb
cccc
# y 这里我首先把1,4行的内容匹配到模式空间,然后用y给他们全部替换成大写;你要替换到多少为大写字母就要打到多少位。
[root@localhost ~]# sed '1,4y/abcde/ABCDE/' 123
AAAA
DDDD
BBBB
CCCC
[root@localhost ~]# 
x命令

x命令是互换模式空间和保持空间的内容

[root@localhost ~]# cat 123
aaaa
dddd
bbbb
cccc
[root@localhost ~]# 
[root@localhost ~]# sed '/aaaa/{h};/cccc/{x}' 123
aaaa
dddd
bbbb
aaaa

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值