免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 3949 | 回复: 12
打印 上一主题 下一主题

sed <x> ? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2011-12-15 00:46 |只看该作者 |倒序浏览
本帖最后由 tt_yy123 于 2011-12-15 01:10 编辑

sed 命令中的x   交换pattern space与hold space应该怎么理解?

下面的两条命令该怎么理解?

(一)
cat aa
aa
bb
cc
dd
ee
ff


sed -e '/aa/h' -e '/cc/x' aa
aa
bb
aa
dd
ee
ff



(二)
cat aa
a
a
a
a
a


sed '/a/{x;s/^/./}' aa
.
.a
.a
.a
.a

论坛徽章:
2
射手座
日期:2014-10-10 15:59:4715-16赛季CBA联赛之上海
日期:2016-03-03 10:27:14
2 [报告]
发表于 2011-12-15 01:53 |只看该作者
回复 1# tt_yy123


    用sedsed跟踪下

论坛徽章:
0
3 [报告]
发表于 2011-12-15 06:54 |只看该作者
sed有两个缓冲区,所有命令都工作在Pattern区上,其中保留着sed刚读入的行。
另外一个Hold区就是用来临时存放Pattern区数据的。在把Pattern区上的数据放入Hold区之前,Hold区为空。

下面是5个关于Pattern区与Hold区之间交换数据的指令:
G  将一个换行和Hold区中的数据追加到Pattern区中数据之后
g  将Hold区的数据覆盖到Pattern区中,Pattern区中源数据全丢弃
H  将一个换行符和Pattern区中的数据追加到Hold区数据之后
h  将Pattern区中的数据覆盖到Hold区,Hold区中的源数据全丢弃
x  交换Pattern区和Hold区中的数据

论坛徽章:
8
摩羯座
日期:2014-11-26 18:59:452015亚冠之浦和红钻
日期:2015-06-23 19:10:532015亚冠之西悉尼流浪者
日期:2015-08-21 08:40:5815-16赛季CBA联赛之山东
日期:2016-01-31 18:25:0515-16赛季CBA联赛之四川
日期:2016-02-16 16:08:30程序设计版块每日发帖之星
日期:2016-06-29 06:20:002017金鸡报晓
日期:2017-01-10 15:19:5615-16赛季CBA联赛之佛山
日期:2017-02-27 20:41:19
4 [报告]
发表于 2011-12-15 08:45 |只看该作者
ps是流水线,hs是仓库
交换pattern space与hold space就是流水线上的东西先摆仓库,把仓库的东西拿到流水线处理

论坛徽章:
0
5 [报告]
发表于 2011-12-15 08:50 |只看该作者
ps是流水线,hs是仓库
交换pattern space与hold space就是流水线上的东西先摆仓库,把仓库的东西拿到流水线处 ...
waker 发表于 2011-12-15 08:45



    深刻的理解才能有这样的比喻.

论坛徽章:
0
6 [报告]
发表于 2011-12-15 08:50 |只看该作者

这个模式缓存区和保持缓存区真让我费解。。。
总是不明白什么意思,太抽象了。

论坛徽章:
13
双鱼座
日期:2013-10-23 09:30:05数据库技术版块每日发帖之星
日期:2016-04-20 06:20:00程序设计版块每日发帖之星
日期:2016-03-09 06:20:002015亚冠之塔什干火车头
日期:2015-11-02 10:07:452015亚冠之德黑兰石油
日期:2015-08-30 10:07:07数据库技术版块每日发帖之星
日期:2015-08-28 06:20:00数据库技术版块每日发帖之星
日期:2015-08-05 06:20:002015年迎新春徽章
日期:2015-03-04 09:57:09辰龙
日期:2014-12-03 14:45:52酉鸡
日期:2014-07-23 09:46:23亥猪
日期:2014-03-13 08:46:22金牛座
日期:2014-02-11 09:36:21
7 [报告]
发表于 2011-12-15 09:34 |只看该作者
ps是流水线,hs是仓库
交换pattern space与hold space就是流水线上的东西先摆仓库,把仓库的东西拿到流水线处 ...
waker 发表于 2011-12-15 08:45



    比喻的灰常好

论坛徽章:
3
2015年迎新春徽章
日期:2015-03-04 09:56:11数据库技术版块每日发帖之星
日期:2016-08-03 06:20:00数据库技术版块每日发帖之星
日期:2016-08-04 06:20:00
8 [报告]
发表于 2011-12-15 10:10 |只看该作者
这个模式缓存区和保持缓存区真让我费解。。。
总是不明白什么意思,太抽象了。
rootstar 发表于 2011-12-15 08:50



    所谓仓库嘛,只要你不去动它,流水线前的东西传递了千遍也与仓库里的储备无关.
   而流水线嘛,东西一遍遍的过啊,每次都是新的

论坛徽章:
3
2015年迎新春徽章
日期:2015-03-04 09:56:11数据库技术版块每日发帖之星
日期:2016-08-03 06:20:00数据库技术版块每日发帖之星
日期:2016-08-04 06:20:00
9 [报告]
发表于 2011-12-15 10:11 |只看该作者
所谓仓库嘛,只要你不去动它,流水线前的东西传递了千遍也与仓库里的储备无关.
   而流水线嘛,东西 ...
cjaizss 发表于 2011-12-15 10:10



    我们再来看x命令,其实操作保留空间的命令远不只x.
    x意味着把模式空间和匹配空间的存储交换

论坛徽章:
3
2015年迎新春徽章
日期:2015-03-04 09:56:11数据库技术版块每日发帖之星
日期:2016-08-03 06:20:00数据库技术版块每日发帖之星
日期:2016-08-04 06:20:00
10 [报告]
发表于 2011-12-15 10:14 |只看该作者
我们再来看x命令,其实操作保留空间的命令远不只x.
    x意味着把模式空间和匹配空间的存储交换
cjaizss 发表于 2011-12-15 10:11



    当然,好好的使用这个保留空间,再加上像t,b这样的跳转命令,可以让你的程序实现比较困难的处理.
    sed实际上虚拟了一种机器,这种机器呢,其实结构比较简单,最擅长的是模式替换,所谓最擅长呢,是因为对它来说可能一句话就实现替换了.sed是图灵完备的,也就是图灵机可算,它就可算.
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP