如何让sed只匹配第一次出现的角色?

时间:2013-10-11 17:00:24

标签: regex linux sed

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

username:P@s$w0rDh@$H:15986:0:365::::

我试过

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

但没有。我尝试了很多变化,但由于某种原因,我无法让它只匹配那个领域。帮助

2 个答案:

答案 0 :(得分:2)

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

sed -i 's/^\([^:]*\):\([^:]*\):/\1:TEST:/'

答案 1 :(得分:1)

使用sed:

sed -i.bak 's/^\([^:]*:\)[^:]*\(.*\)$/\1foo\2/' file

使用awk你可以这样做:

awk -F: '{$2="foo"}1' OFS=: file