GNU/Linux >> Tutoriels Linux >  >> Linux

Comment insérer du texte à la 1ère ligne d'un fichier à l'aide de sed ?

Supposons que vous ayez un file comme ceci :

one
two

Puis pour ajouter à la première ligne :

$ sed '1 s_$_/etc/example/live/example.com/fullchain.pem;_' file
one/etc/example/live/example.com/fullchain.pem;
two

A insérer avant la première ligne :

$ sed '1 i /etc/example/live/example.com/fullchain.pem;' file
/etc/example/live/example.com/fullchain.pem;
one
two

Ou, pour ajouter après la première ligne :

$ sed '1 a /etc/example/live/example.com/fullchain.pem;' file
one
/etc/example/live/example.com/fullchain.pem;
two

Notez le numéro 1 dans ces sed expressions - cela s'appelle l'adresse en sed terminologie. Il vous indique sur quelle ligne la commande qui suit est à opérer.

Si votre fichier ne contient pas la ligne que vous adressez, le sed la commande ne sera pas exécutée. C'est pourquoi vous ne pouvez pas insérer/ajouter sur la ligne 1, si votre fichier est vide.

Au lieu d'utiliser éditeur de flux , pour ajouter (pour vider les fichiers), il suffit d'utiliser une redirection shell >> :

echo "content" >> file

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 pour insérer les données suivantes à la ligne 2 qui n'existent pas à ce point donc sed ne peut pas modifier le fichier.

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


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

Linux
  1. Comment déplacer une ligne vers le haut ou vers le bas d'une ligne dans un fichier texte ?

  2. Comment la commande Sed '1!g;h;$!d' inverse-t-elle le contenu d'un fichier ?

  3. Créer des fichiers en utilisant la ligne de commande sous Linux

  4. Comment remplacer sed comme texte par python?

  5. Comment lire l'avant-dernière ligne d'un fichier avec Bash ?

Comment télécharger un fichier sur Ubuntu à l'aide de la ligne de commande

Comment télécharger un fichier sur Ubuntu Linux à l'aide de la ligne de commande

Comment ajouter du texte au début du fichier sous Linux

Comment supprimer des lignes d'un fichier à l'aide de la commande Sed

Comment supprimer le texte sélectionné dans l'éditeur vi

Comment insérer un texte au début d'un fichier ?