LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 695|回复: 8

一个sed的问题

[复制链接]
发表于 2004-3-2 12:10:37 | 显示全部楼层 |阅读模式
在一个makefile中看到有这样一段:
MAKEDEPEND = set -e; $(CC) -M -c $(CFLAGS) $< | \
                sed '1s*^*$*.d $(*D)/*' > $@; \
                [ -s $@ ] || rm -f $@

注释中解释这段话是用来为每一个.c产生一个.d的依赖文件,可是我怎么也看不懂其中sed '1s*^*$*.d $(*D)/*' 这句,哪位sed高手能解释一下这句话的含义,谢谢。
发表于 2004-3-2 14:27:35 | 显示全部楼层
这句改变了sed默认的分隔符,对第一行进行替换,..???
我看还是让sed高手来解释解释吧~~
 楼主| 发表于 2004-3-2 14:46:27 | 显示全部楼层
是不是将分隔符改成了*,那怎么会有4个*,不是应该只有3个吗,s/pat1/pat2/
还有其中的$什么意思,行尾匹配?
发表于 2004-3-2 14:53:11 | 显示全部楼层
^是开头,$是结尾,你可以\找出一个要替换的.c文件测试一下
 楼主| 发表于 2004-3-2 15:26:30 | 显示全部楼层
还是不明白,如果把分隔符换成%,应该是什么样子
是不是:sed '1s%^*$%.d $(*D)/%'
发表于 2004-3-2 19:05:58 | 显示全部楼层
sed 每次处理一行, 不能像 awk 那样可以修改分隔符
发表于 2004-3-2 19:14:09 | 显示全部楼层
$* 和 $(*D) 在 Makefile 中有特殊含义, 与 sed 无关, 另外两个 * 才是 sed 替换命令(s) 的分隔符, 估计原作者故意用 * 作分隔符(可以用任意其它字符, 不过一般用 /), 好让大家看不明白
发表于 2004-3-2 19:16:09 | 显示全部楼层
我的 Makefile 中是这么用的:

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
发表于 2004-3-2 19:19:08 | 显示全部楼层
$* 和 $(*D) 的含义请参考 makefile 手册
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表