sed insert line with spaces to a specific line

I have a line with spaces in the start for example " Hello world". I want to insert this line to a specific line in a file. for example insert " hello world" to the next file

hello
world

result:

hello
    hello world
world

I am using this sed script:

sed -i "${line} i ${text}" $file

the problem is that i am getting my new line with out the spaces:

hello
hello world
world

Solution 1:

You can escape the space character, for example to add 2 spaces:

sed -i "${line} i \ \ ${text}" $file

Or you can do it in the definition of your text variable:

text="\ \ hello world"

Solution 2:

You only need one \ to input multiple blanks like this

sed -i "${line} i \    ${text}" $file

Solution 3:

$ a="  some string  "
$ echo -e "hello\nworld"
hello
world
$ echo -e "hello\nworld" | sed "/world/ s/.*/${a}.\n&/" 
hello
  some string  .
world

The . was added in the substitution above to demonstrate that the trailing whitepsaces are preserved. Use sed "/world/ s/.*/${a}\n&/" instead.