Regex 与Sed中的*混淆

Regex 与Sed中的*混淆,regex,sed,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

我有这个档案:

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

有人能解释发生了什么事吗。*there应该匹配所有字符。

*
表示先前构造的任意重复次数(包括0次重复)<代码>表示任何字符。因此,您应该使用
*
来匹配所有字符,而不是
*
(来自globbing)

因此,这就是解决方案:

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

这并没有解释
sed
,但说明了如何使用
awk

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

你跑得真快!我删除了我的答案,因为你的答案是第一个,并且解释得更好:)+1现在我知道[^\n]*是如何工作的。它匹配的是除新行字符以外的任何字符。为了完整起见,请指出,“任意数量的重复”包括零重复<代码>*匹配先前构造的零次或多次出现。