Reputation: 2719
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
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
Reputation: 766
You only need one \
to input multiple blanks
like this
sed -i "${line} i \ ${text}" $file
Upvotes: 57
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
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