在Sed中与*混淆

时间:2013-09-25 12:27:40

标签: regex sed

我有这个文件:

test.txt
============
a b c
testing=123
a b c

我认为以下命令将替换testing = 123行。

sed "s/^testing=*/testing=alpha/g" test.txt

导致:

a b c
testing=alpha123
a b c

所以我需要:

sed "s/^testing=[^\n]*/testing=alpha/g" test.txt

得到这个:

a b c
testing=alpha
a b c

任何人都可以解释发生了什么。 *应匹配所有字符。

2 个答案:

答案 0 :(得分:3)

*表示先前构造的任意数量的重复(包括0次重复)。 .表示任何角色。所以你应该.*来匹配所有的字符,而不是*(来自globbing)。

所以,这就是解决方案:

$ sed "s/^testing=.*/testing=alpha/g"  test.txt
a b c
testing=alpha
a b c

答案 1 :(得分:-1)

这不会解释sed,但会说明如何使用awk

awk -F= '/^testing/ {$2="alpha"}1' OFS== test.txt