免费注册 查看新帖 |

Chinaunix

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

问个sed还有trap的问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-08-09 15:50 |只看该作者 |倒序浏览
昨天看了下sed手册
看了删除多余空余行,只剩一个空余行的命令是这样的
sed -e '/^$/{
   N
   /^$/D  
   }' 文件档

大概意思说:发现空行,给patter space加一行,然后判断这一行是否是空行,空行就把模式区里面的第一行给干掉,然后对剩余的一行继续执行sed scrips操作
我的疑问在于在
sed -e '/^$/{     #匹配到一空行
   N
   /^$/D                #这边是匹配另一个空行,还是原来的空行啊,按照程序作用应该是匹配第二个空行
   }' 文件档

{}的作用在于对同一位址空间里的东西做操作,但是{}括号里面又有位址信息,括号里的位址信息是匹配哪里的呢,应该怎么处理呢?

另外D 的作用是不是就是相当于删掉pattersapce第一行之后,然后对剩余的做sed scrips操作,是不是就是重复-e后面的命令呢?

另外小弟有做了个trap的应用,资料上说父子shell间的信号的处理是互不影响的,而我做出来的实验是,在父shell里面设置了信号处理,
在子shell里面,就是重覆盖了信号处理,当信号来的时候还是执行父shell里面的信号处理,不知道怎么回事,例子如下。

hello
#!/bin/sh
#

set -x  

trap "echo hello"   SIGINT


./ceshi

#./test
sleep 100


echo "gogo"

ceshi:
set -x
#trap SIGINT
trap "echo child" SIGINT
echo "i am a child"
sleep 50

echo "haha"
我发现在执行ceshi脚本的时候,我按ctrl+c,打印出来的不是child,而是hello,这个跟理论矛盾,不知道怎么解决。

兄弟们还有经典shell的例子,我想参考下,学习下

论坛徽章:
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
2 [报告]
发表于 2009-08-10 08:33 |只看该作者
关于sed,D子命令会引起再次的循环,但你那种写法D前面的表达式会匹配么?

关于trap,取得hello的pid , kill -2 pidofhello再观察

论坛徽章:
0
3 [报告]
发表于 2009-08-18 20:43 |只看该作者
/^$/这个不是代表空行吗,怎么不能匹配???N过后patternpace里面有两个空行啊
关于trap的问题,后来发现是自己看错了,不好意思~~~

论坛徽章:
0
4 [报告]
发表于 2009-08-19 01:50 |只看该作者
自己测试一下不就知道了

那个手册应该是写错了,应该是这样

sed '/^$/{N;/^\n$/D}' urfile
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP