QQ登录

只需一步,快速开始

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 1109|回复: 10

请问如下Sed语句的含义,谢谢

[复制链接]
发表于 2005-8-19 14:29:52 | 显示全部楼层 |阅读模式
Makefile中
%.d: %.c
            @set -e; rm -f $@; \
             $(CC) -M $(CPPFLAGS) $< > $@.$$$$; \
             sed 's,\($*\)\.o[ :]*,\1.o $@ : ,g' < $@.$$$$ > $@; \
             rm -f $@.$$$$
      请问sed语句中的\($*\)有什么作用,和\(.*\)有什么不同呢,我试了一下,发现使用\($*\)时,\1始终为空,谢谢!
发表于 2005-8-20 07:52:33 | 显示全部楼层
正则表达式中^表示行首,$表示行尾
回复

使用道具 举报

 楼主| 发表于 2005-8-20 18:32:51 | 显示全部楼层
经过版主的解释,我不懂那个 \(.*\)中的‘.’是什么意思了,敬请版主解释,谢谢
回复

使用道具 举报

发表于 2005-8-20 20:14:37 | 显示全部楼层
.是任意匹配,你看过置顶帖??
回复

使用道具 举报

 楼主| 发表于 2005-8-20 20:35:55 | 显示全部楼层
看过,下下来看过好几次
回复

使用道具 举报

发表于 2005-8-20 21:17:51 | 显示全部楼层
来自原文:http://www.linuxfans.org/nuke/modules.php?name=Forums&file=viewtopic&t=112296
看了各个linux 论坛的帖子,感觉sed的介绍不少,但有点零乱,在这里整理一下,希望能对学习者有所帮助!
注:除了多个命令情况外,-e 选项可以不用!
基础:
正则表达式(Regular Expression)
在学习sed前,首先了解RE的基本知识,大体上最基本也需要知道下面这些,如果不了解正则表达式,那么您将很难进阶Smile
引用:

- 錨點(anchor)
用以標識 RE 於句子中的位置所在. 常見有:
^: 表示句首. 如 ^abc 表示以 abc 開首的句子.
$: 表示句尾. 如 abc$ 表示以 abc 結尾的句子.
\<: 表示詞首. 如 \<abc 表示以 abc 開首的詞.
\>: 表示詞尾. 如 abc\> 表示以 abc 結尾的詞.

- 修飾字符(modifier)
獨立表示時本身不具意義, 專門用以修改前一個 char. set 的出現次數. 常見有:
*: 表示前一個 char. set 的出現次數為 0 或多次. 如 ab*c 表示 a 與 c 之間可有 0 或多個 b 存在.
?: 表示前一個 char. set 的出現次數為 0 或 1 次. 如 ab?c 表示 a 與 c 之間可有 0 或 1 個 b 存在.
+: 表示前一個 char. set 的出現次數為 1 或多次. 如 ab+c 表示 a 與 c 之間可有 1 或多個 b 存在.
{n}: 表示前一個 char. set 的出現次數必須為 n 次. 如 ab{3,}c 表示 a 與 c 之間必須有 3 個 b 存在.{n,}: 表示前一個 char. set 的出現次數至少為 n 次. 如 ab{3,}c 表示 a 與 c 之間至少有 3 個 b 存在.
{n,m}: 表示前一個 char. set 的出現次數為 n 到 m 次. 如 ab{3,5}c 表示 a 與 c 之間有 3 到 5 個 b 存在.

. : 匹配任意一个字符(1个)
.*:匹配任意多个字符(1或多个)
回复

使用道具 举报

 楼主| 发表于 2005-8-21 11:20:43 | 显示全部楼层
感谢感谢,我说我怎么一点都不知道,原来那篇里有5个链接,我只下了4个,露掉了一个,真是不好意思
回复

使用道具 举报

 楼主| 发表于 2005-8-22 09:38:11 | 显示全部楼层
再请问一个问题,sed 's,\($*\)\.o[ :]*,\1.o $@ : ,g' < $@.$$$$ > $@; \ 中\($*\)应该表示0个或多个行尾吧,那加上它有什么意义吗,makefile里会出现这种情况吗,是不是\($*\)有些多余啊,谢谢!
回复

使用道具 举报

发表于 2005-8-23 23:38:47 | 显示全部楼层
去掉试试
回复

使用道具 举报

 楼主| 发表于 2005-8-24 21:00:02 | 显示全部楼层
我试过的,有没有对结果都没有影响,可能是我太过于信任资料了,以至于总认为它有它的道理,呵呵
回复

使用道具 举报

发表于 2005-8-25 16:48:06 | 显示全部楼层
.表示匹配任意字符,*表示前面的字符可以任意重复,.*就表示任意字符串了,
“\(”,“\)”界定的部分表示分组,可以用\1,\2来引用
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

GMT+8, 2024-7-8 11:44 , Processed in 0.058211 second(s), 16 queries .

© 2021 Powered by Discuz! X3.5.

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