Ggdw
Ggdw

Reputation: 2719

sed insert line with leading 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 without the spaces:

hello
hello world
world

Upvotes: 118

Views: 129427

Answers (4)

dashohoxha
dashohoxha

Reputation: 221

It can be done by splitting the expression like this:

sed -i $file -e '2i\' -e "     $text"

This is a GNU extension for easier scripting.

Upvotes: 0

LeoChu
LeoChu

Reputation: 766

You only need one \ to input multiple blanks like this

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

Upvotes: 57

devnull
devnull

Reputation: 123668

$ 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.

Upvotes: 6

Atropo
Atropo

Reputation: 12561

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"

Upvotes: 157

Related Questions