Salut j'essaye d'ajouter du texte à la 1ère ligne d'un fichier en utilisant sed jusqu'à présent j'ai essayé

#!/bin/bash
touch test
sed -i -e '1i/etc/example/live/example.com/fullchain.pem;\' test

Et ça ne marche pas aussi essayé

#!/bin/bash
touch test
sed -i "1i ssl_certificate /etc/example/live/example.com/fullchain.pem;" test

Ça ne semble pas marcher non plus bizarrement quand j'essaye

#!/bin/bash
touch test
echo "ssl_certificate /etc/example/live/example.com/fullchain.pem;" > test

J'obtiens la première ligne de texte qui s'affiche lorsque j'utilise cat test mais dès que je tape sed -i "2i ssl_certificate_key /etc/example/live/example.com/privkey.pem;" Je ne vois pas les informations que je devrais faire sur la ligne 2, à savoir ssl_certificate_key /etc/example/live/example.com/privkey.pem;

Donc ma question pour résumer

  1. Le texte peut-il être inséré dans la 1ère ligne d'un fichier nouvellement créé à l'aide de sed?
  2. Si oui, quelle est la meilleure façon d'insérer du texte après la 1ère ligne de texte?
4
user3700919 4 juil. 2017 à 01:40

2 réponses

Votre commande fonctionnera si vous vous assurez que le fichier d'entrée comporte au moins une ligne:

[ "$(wc -l < test)" -gt 0 ] || printf '\n' >> test
sed -i -e '1 i/etc/example/live/example.com/fullchain.pem;\' test
1
PSkocik 3 juil. 2017 à 22:52

Votre problème vient du fait que sed ne peut pas localiser la ligne sur laquelle vous lui dites d'écrire, par exemple:

touch test
sed -i -e '1i/etc/example/live/example.com/fullchain.pem;\' test

Tente d'écrire pour insérer à la ligne 1 de test, mais cette ligne n'existe pas à ce stade. Si vous avez créé votre fichier en tant que:

echo -en "\n" > test
sed -i '1i/etc/example/live/example.com/fullchain.pem;\' test

Il ne se plaindrait pas, mais vous auriez une ligne supplémentaire. De même, lorsque vous appelez:

sed -i "2i ssl_certificate_key /etc/example/live/example.com/privkey.pem;"

Vous dites à sed d'insérer les données suivantes à la ligne 2 qui n'existe pas à ce stade pour que sed ne puisse pas éditer le fichier.

Donc, pour la ligne initiale ou la dernière ligne du fichier, vous ne devez pas utiliser sed car de simples redirections de flux > et >> sont plus que suffisantes.

1
zwer 3 juil. 2017 à 23:18