This works:
sed -rne 's/(dbservername)\s+\w+/\1 yyy/gip'
(When you use the -r option, you don’t have to escape the parens.)
Bit of explanation:
-r
is extended regular expressions – makes a difference to how the regex is written.-n
does not print unless specified –sed
prints by default otherwise,-e
means what follows it is an expression. Let’s break the expression down:s///
is the command for search-replace, and what’s between the first pair is the regex to match, and the second pair the replacement,gip
, which follows the search replace command;g
means global, i.e., every match instead of just the first will be replaced in a line;i
is case-insensitivity;p
means print when done (remember the-n
flag from earlier!),- The brackets represent a match part, which will come up later. So
dbservername
is the first match part, \s
is whitespace,+
means one or more (vs*
, zero or more) occurrences,\w
is a word, that is any letter, digit or underscore,\1
is a special expression for GNUsed
that prints the first bracketed match in the accompanying search.