web-dev-qa-db-fra.com

sed insérer une ligne avec des espaces sur une ligne spécifique

J'ai une ligne avec des espaces au début, par exemple "Hello world". Je veux insérer cette ligne dans une ligne spécifique d'un fichier. par exemple, insérez "bonjour le monde" dans le fichier suivant

hello
world

résultat:

hello
    hello world
world

J'utilise ce script sed:

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

le problème est que je reçois ma nouvelle ligne sans les espaces:

hello
hello world
world
52
Yo Al

Vous pouvez échapper le caractère space, par exemple pour ajouter 2 espaces:

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

Ou vous pouvez le faire dans la définition de votre variable text:

text="\ \ hello world"
70
Atropo

Vous n'avez besoin que d'un \ pour saisir plusieurs blancs comme celui-ci

sed -i "${line} i \    ${text}" $file
18
LeoChu
$ a="  some string  "
$ echo -e "hello\nworld"
hello
world
$ echo -e "hello\nworld" | sed "/world/ s/.*/${a}.\n&/" 
hello
  some string  .
world

Le . a été ajouté dans la substitution ci-dessus pour démontrer que les espaces blancs de fin sont préservés. Utilisation sed "/world/ s/.*/${a}\n&/" au lieu.

4
devnull