bash - Insert with sed -
i start this:
{"allowed","20863962"}
and insert label: , value: looks this:
{ label: "allowed", value: "20863962" }
i tried sed, replace, instead of insert.
echo "{"allowed","20863962"}" | sed 's/a/label: /' | sed 's/[0-9]/value: /'
output
{label: llowed,value: 0863962}
you got asked for, wasn't intended.
first off, output of echo
is:
{allowed,20863962}
because shell strips double quotes out. correct input sed
, use:
echo '{"allowed","20863962"}'
then sed
command drops characters, not mention not handling double quotes, , being highly specific current data. more general solution be:
sed 's/{\("[^"]*"\),\("[^"]*"\)}/{ label: \1, value: \2 }/'
this looks 2 strings inside double quotes within {
, }
comma separating them , saves strings (using \(...\)
) use \1
, \2
.
$ echo '{"allowed","20863962"}'| sed 's/{\("[^"]*"\),\("[^"]*"\)}/{ label: \1, value: \2 }/' { label: "allowed", value: "20863962" } $
if general regex general, simpler technique use multiple replacements, can decide how importance attach space after open brace and, more particularly, before close brace:
$ echo '{"allowed","20863962"}' | > sed -e 's/{/{ label: /' -e 's/,/, value: /' -e 's/}/ }/' { label: "allowed", value: "20863962" } $
the difference between 2 in number of substitute operations , complexity. in sense, single-substitute operation concentrates on strings , fixes surroundings; multiple-substitute operation concentrates on surroundings , fixes up.
we 'rescue' code using this. note there no reason run sed
twice in context.
sed -e 's/"a/label: &/' -e 's/"[0-9]/value: &/'
this finds double quote , a
, replaces label: "a
because &
means 'what matched'. second replacement. not insert space after {
or before }
, may ok.
$ echo '{"allowed","20863962"}' | sed -e 's/"a/label: &/' -e 's/"[0-9]/value: &/' {label: "allowed",value: "20863962"} $
were using format, i'd omit spaces after colons, that's me...
Comments
Post a Comment