112 votes

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

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

hello
world

résultat :

hello
    hello world
world

J'utilise ce sed script :

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

Le problème est que j'obtiens ma nouvelle ligne sans les espaces :

hello
hello world
world

144voto

Atropo Points 5169

Vous pouvez échapper à la space par exemple pour ajouter 2 espaces :

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

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

text="\ \ hello world"

56voto

LeoChu Points 180

Vous n'avez besoin que d'un seul \ pour saisir plusieurs blancs comme ceci

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

6voto

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

Le site . a été ajouté dans la substitution ci-dessus pour démontrer que les blancs de fin de ligne sont préservés. Utilisez sed "/world/ s/.*/${a}\n&/" à la place.

0voto

dashohoxha Points 1

Cela peut être fait en divisant l'expression comme ceci :

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

Il s'agit d'une extension GNU pour faciliter la création de scripts.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X