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]*是如何工作的。它匹配的是除新行字符以外的任何字符。为了完整起见,请指出,“任意数量的重复”包括零重复<代码>*匹配先前构造的零次或多次出现。