免费注册 查看新帖 |

Chinaunix

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

sed 模式空间和后备空间的关系 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-07-14 12:51 |只看该作者 |倒序浏览
sed 模式空间和后备空间的关系
我只知道sed有个模式空间,但看论坛的教学资料说还有个后备空间。
对sed的工作流程我的理解是这样的:
   首先读取资料、存入模式空间、对其进行编辑、再输出、再用下一行替换模式空间内容
   现在多了个后备空间、不知道它是如何工作的了
   问题、
      默认情况下sed会往后备空间存储资料吗?
      如果后备空间有内容的情况下。
      sed编辑完模式空间的资料后是自动编辑后备空间的资料?还是先读取下一行的资料到模式空间

论坛徽章:
5
2015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:50:282015年亚洲杯之朝鲜
日期:2015-03-13 22:47:33IT运维版块每日发帖之星
日期:2016-01-09 06:20:00IT运维版块每周发帖之星
日期:2016-03-07 16:27:44
2 [报告]
发表于 2008-07-14 12:55 |只看该作者

回复 #1 26933062 的帖子

sed 有两个空间:Pattern Space & Hold Space。

至于sed如何对它们处理的细节,请LZ查论坛或者man sed.

论坛徽章:
23
15-16赛季CBA联赛之吉林
日期:2017-12-21 16:39:27白羊座
日期:2014-10-27 11:14:37申猴
日期:2014-10-23 08:36:23金牛座
日期:2014-09-30 08:26:49午马
日期:2014-09-29 09:40:16射手座
日期:2014-11-25 08:56:112015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:49:0315-16赛季CBA联赛之山东
日期:2017-12-21 16:39:1915-16赛季CBA联赛之广东
日期:2016-01-19 13:33:372015亚冠之山东鲁能
日期:2015-10-13 09:39:062015亚冠之西悉尼流浪者
日期:2015-09-21 08:27:57
3 [报告]
发表于 2008-07-14 12:59 |只看该作者
没啥关系。
默认情况下,保留空间有一个换行符(\n)
一个sed命令,可以完全用不到保留空间,例如基本的 sed 's/a/b/'
涉及到保留空间,一般都是h,H,g,G,x等命令。

论坛徽章:
5
2015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:50:282015年亚洲杯之朝鲜
日期:2015-03-13 22:47:33IT运维版块每日发帖之星
日期:2016-01-09 06:20:00IT运维版块每周发帖之星
日期:2016-03-07 16:27:44
4 [报告]
发表于 2008-07-14 13:03 |只看该作者

回复 #3 ly5066113 的帖子

ly5066113,我觉得默认情况下,Hold space什么也没有。仅供参考。

论坛徽章:
23
15-16赛季CBA联赛之吉林
日期:2017-12-21 16:39:27白羊座
日期:2014-10-27 11:14:37申猴
日期:2014-10-23 08:36:23金牛座
日期:2014-09-30 08:26:49午马
日期:2014-09-29 09:40:16射手座
日期:2014-11-25 08:56:112015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:49:0315-16赛季CBA联赛之山东
日期:2017-12-21 16:39:1915-16赛季CBA联赛之广东
日期:2016-01-19 13:33:372015亚冠之山东鲁能
日期:2015-10-13 09:39:062015亚冠之西悉尼流浪者
日期:2015-09-21 08:27:57
5 [报告]
发表于 2008-07-14 13:04 |只看该作者
原帖由 blackold 于 2008-7-14 13:03 发表
ly5066113,我觉得默认情况下,Hold space什么也没有。仅供参考。


seq 3 | sed 'G'

论坛徽章:
5
2015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:50:282015年亚洲杯之朝鲜
日期:2015-03-13 22:47:33IT运维版块每日发帖之星
日期:2016-01-09 06:20:00IT运维版块每周发帖之星
日期:2016-03-07 16:27:44
6 [报告]
发表于 2008-07-14 13:07 |只看该作者

回复 #5 ly5066113 的帖子

这是G的时候才添加的\n,并不能说Hold space原来有\n,如果是后者就有两个空行了。

论坛徽章:
23
15-16赛季CBA联赛之吉林
日期:2017-12-21 16:39:27白羊座
日期:2014-10-27 11:14:37申猴
日期:2014-10-23 08:36:23金牛座
日期:2014-09-30 08:26:49午马
日期:2014-09-29 09:40:16射手座
日期:2014-11-25 08:56:112015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:49:0315-16赛季CBA联赛之山东
日期:2017-12-21 16:39:1915-16赛季CBA联赛之广东
日期:2016-01-19 13:33:372015亚冠之山东鲁能
日期:2015-10-13 09:39:062015亚冠之西悉尼流浪者
日期:2015-09-21 08:27:57
7 [报告]
发表于 2008-07-14 13:08 |只看该作者
原帖由 blackold 于 2008-7-14 13:07 发表
这是G的时候才添加的\n,并不能说Hold space原来有\n,如果是后者就有两个空行了。


echo 123 | sed 'H;G'
echo 123 | sed 'h;G'

[ 本帖最后由 ly5066113 于 2008-7-14 13:10 编辑 ]

论坛徽章:
5
2015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:50:282015年亚洲杯之朝鲜
日期:2015-03-13 22:47:33IT运维版块每日发帖之星
日期:2016-01-09 06:20:00IT运维版块每周发帖之星
日期:2016-03-07 16:27:44
8 [报告]
发表于 2008-07-14 13:12 |只看该作者
原帖由 ly5066113 于 2008-7-14 13:08 发表


echo 123 | sed 'H;x'
echo 123 | sed 'h;x'

echo 123 | sed 'H;x' 输出:
;空行 由H产生。
123

echo 123 | sed 'h;x'只输出一行123:
123

这正说明了Hold space什么也没有。

echo 123 | sed 'H;G' 产生三行:
123   ;这个\n由G产生
       ;这个\n由H产生
123

echo 123 | sed 'h;G'
123  ;这个\n由G产生。
123

[ 本帖最后由 blackold 于 2008-7-14 13:18 编辑 ]

论坛徽章:
23
15-16赛季CBA联赛之吉林
日期:2017-12-21 16:39:27白羊座
日期:2014-10-27 11:14:37申猴
日期:2014-10-23 08:36:23金牛座
日期:2014-09-30 08:26:49午马
日期:2014-09-29 09:40:16射手座
日期:2014-11-25 08:56:112015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:49:0315-16赛季CBA联赛之山东
日期:2017-12-21 16:39:1915-16赛季CBA联赛之广东
日期:2016-01-19 13:33:372015亚冠之山东鲁能
日期:2015-10-13 09:39:062015亚冠之西悉尼流浪者
日期:2015-09-21 08:27:57
9 [报告]
发表于 2008-07-14 13:18 |只看该作者
原帖由 blackold 于 2008-7-14 13:12 发表

echo 123 | sed 'H;x' 输出:
;空行 由H产生。
123

echo 123 | sed 'h;x'只输出一行123:
123

这正说明了Hold space什么也没有。


如果空行由H产生,那么为什么会在123的前面?

或者这样:

echo 123 | sed 'H;H;x'

为什么只产生一个空行?

论坛徽章:
23
15-16赛季CBA联赛之吉林
日期:2017-12-21 16:39:27白羊座
日期:2014-10-27 11:14:37申猴
日期:2014-10-23 08:36:23金牛座
日期:2014-09-30 08:26:49午马
日期:2014-09-29 09:40:16射手座
日期:2014-11-25 08:56:112015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:49:0315-16赛季CBA联赛之山东
日期:2017-12-21 16:39:1915-16赛季CBA联赛之广东
日期:2016-01-19 13:33:372015亚冠之山东鲁能
日期:2015-10-13 09:39:062015亚冠之西悉尼流浪者
日期:2015-09-21 08:27:57
10 [报告]
发表于 2008-07-14 13:20 |只看该作者
# double space a file
#使一个文件中每一行都占用两行空间(就是在每一行后边插一行空行)
sed G
###sed 中G命令的解释为append hold space to pattern space.
###就是在当前位置后加一行保留空间中的内容,无任何动作时,保留空间为空行
###所以就double space a file 了,呵呵.

http://bbs.chinaunix.net/viewthr ... ;highlight=sed1line

man sed

G append hold space to pattern space.
并没有说会自动加空行。

[ 本帖最后由 ly5066113 于 2008-7-14 13:22 编辑 ]
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP