haha205006 发表于 2005-8-19 14:29:52

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

Makefile中
%.d: %.c
            @set -e; rm -f $@; \
             $(CC) -M $(CPPFLAGS) $< > $@.$$$$; \
             sed 's,\($*\)\.o[ :]*,\1.o $@ : ,g' < $@.$$$$ > $@; \
             rm -f $@.$$$$
      请问sed语句中的\($*\)有什么作用,和\(.*\)有什么不同呢,我试了一下,发现使用\($*\)时,\1始终为空,谢谢!

zhy2111314 发表于 2005-8-20 07:52:33

正则表达式中^表示行首,$表示行尾

haha205006 发表于 2005-8-20 18:32:51

经过版主的解释,我不懂那个 \(.*\)中的‘.’是什么意思了,敬请版主解释,谢谢

demonlj 发表于 2005-8-20 20:14:37

.是任意匹配,你看过置顶帖??

haha205006 发表于 2005-8-20 20:35:55

看过,下下来看过好几次

demonlj 发表于 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或多个)

haha205006 发表于 2005-8-21 11:20:43

感谢感谢,我说我怎么一点都不知道,原来那篇里有5个链接,我只下了4个,露掉了一个,真是不好意思

haha205006 发表于 2005-8-22 09:38:11

再请问一个问题,sed 's,\($*\)\.o[ :]*,\1.o $@ : ,g' < $@.$$$$ > $@; \ 中\($*\)应该表示0个或多个行尾吧,那加上它有什么意义吗,makefile里会出现这种情况吗,是不是\($*\)有些多余啊,谢谢!

zhy2111314 发表于 2005-8-23 23:38:47

去掉试试 :-D

haha205006 发表于 2005-8-24 21:00:02

我试过的,有没有对结果都没有影响,可能是我太过于信任资料了,以至于总认为它有它的道理,呵呵

vliqi 发表于 2005-8-25 16:48:06

.表示匹配任意字符,*表示前面的字符可以任意重复,.*就表示任意字符串了,
“\(”,“\)”界定的部分表示分组,可以用\1,\2来引用
页: [1]
查看完整版本: 请问如下Sed语句的含义,谢谢