如何让 sed 只匹配第一次出现的字符?

use*_*860 2 regex linux sed

我正在使用GNU Sed 4.2.1。我试图替换以下行中的第二个字段(/etc/shadow中的密码)。Awk不是一个选择。

username:P@s$w0rDh@$H:15986:0:365::::
Run Code Online (Sandbox Code Playgroud)

我试过了

sed -i 's/\(^[a-z]*\):.*?:/\1:TEST:/'
Run Code Online (Sandbox Code Playgroud)

但什么也没有。我尝试了很多变体,但由于某种原因我无法让它只匹配该字段。帮助?

nos*_*sid 6

用于[^:]*匹配所有内容直到下一个:

sed -i 's/^\([^:]*\):\([^:]*\):/\1:TEST:/'
Run Code Online (Sandbox Code Playgroud)