Variables.
In any shell, you could concatenate variables or values:
$ a=One; b=Two; c=Three
$ d="$a$b$c"; echo $d
OneTwoThree
The ${parameter%word} type of structures is POSIX have been supported in most shells for a long time.
Assuming FILE=filename.ext, you could do:
$ FILE="${FILE%.*}_sometext.${FILE##*.}"; echo "$FILE"
filename_sometext.ext
That is one line (as requested) and works on most shells.
It is also possible to use variables (even with several dots):
#!/bin/bash
FILE=file.one.name.ext
ADDTEXT="_sometext"
EXT="${FILE##*.}"
echo "EXT=$EXT"
echo "final FILE=${FILE%.*}${ADDTEXT}.$EXT"
Or, in just one line:
ONEFILE=${FILE%.*}${ADDTEXT}.${FILE##*.}
echo "one   FILE=$ONEFILE"
Pattern substitution
What gets tricky is trying to use ${parameter/pattern/string} «Pattern substitution.»
A variable works in many shells (even busybox ash):
NEWTEXT="${ADDTEXT}.${FILE##*.}"
echo "ash   FILE=${FILE/.*/${NEWTEXT}}"
But not in older shells.  
Only for FILE=filename.ext:
This works in bash (and ksh, ksh93, mksh, zsh) but not in ash, dash, sh or csh
echo "bash  FILE=${FILE/%.*/${ADDTEXT}.${FILE##*.}}"
Note that it is using the % character to indicate a match at the end of the parameter (but, sadly it is greedy and eats all dots in FILE=file.one.name.ext).
Conclusion
The best method to control how greedy is the substitution is to use separate variables (as opposed to some from of «Pattern substitution.»)
     
    
ksh88notksh93?ksh88is what most people mean when they sayksh, and it doesn't support many features that are specific toksh93. Hence why I asked. ;-)