web-dev-qa-db-fra.com

Comment insérer une ligne en haut d'un fichier texte à l'aide de la ligne de commande?

Je veux insérer du texte en haut d'un fichier déjà existant. Comment puis-je atteindre cet objectif. J'ai essayé echo et tee mais sans succès.

J'essayais d'insérer une ligne de prise en pension en haut du fichier sources.list à partir du terminal.

Remarque

J'ai besoin d'une solution rapide en une ligne, car je connaissais déjà la méthode d'une autre réponse

25
Anwar

C'est en fait assez facile avec sed:

  • sed -i -e '1iHere is my new top line\' filename

  • 1i indique à sed d'insérer le texte qui suit à la ligne 1 du fichier; n'oubliez pas la nouvelle ligne \ à la fin pour que la ligne 1 existante soit déplacée vers la ligne 2.

38
ish

En général, éditer avec un script est délicat, mais vous pouvez utiliser echo et cat, puis mv

echo "fred" > fred.txt
cat fred.txt t.txt >new.t.txt
# now the file new.t.txt has a new line "fred" at the top of it
cat new.t.txt
# can now do the rename/move
mv new.t.txt t.txt

Cependant si vous jouez avec sources.list, vous devez ajouter une validation et une mise à l’épreuve des balles pour détecter les erreurs, etc. parce que vous ne voulez vraiment pas perdre cela. Mais c'est une question distincte :-)

7
Sean
./prepend.sh "myString" ./myfile.txt

on sait que prepend est mon shell personnalisé :

#!/bin/sh
#add Line at the top of File
# @author Abdennour TOUMI
if [ -e $2 ]; then
    sed -i -e '1i$1\' $2
fi

Utilisez également un chemin relatif ou absolu, cela devrait fonctionner correctement:

./prepend.sh "my New Line at Top"  ../Documents/myfile.txt

Mettre à jour :

si vous voulez un script permanent pour cela, ouvrez nano /etc/bash.bashrc puis ajoutez cette fonction à la fin du fichier:

function prepend(){
# @author Abdennour TOUMI
if [ -e $2 ]; then
    sed -i -e '1i$1\' $2
fi

}

Rouvrez votre terminal et profitez de:

prepend "another line at top" /path/to/my/file.txt
6
Abdennour TOUMI

Et pourquoi ne pas utiliser un véritable éditeur de texte pour cela? ed est l'éditeur de texte standard.

ed -s filename <<< $'1i\nFIRST LINE HERE\n.\nwq'

Ou, si vous voulez que les commandes soient plus lisibles:

ed -s filename < <(printf '%s\n' 1i "FIRST LINE" . wq)
  • 1: aller à la première ligne
  • i: mode d'insertion
  • vos affaires que vous voulez insérer ...
  • .: arrête d'insérer, retourne en mode normal
  • wq: écrivez et quittez, merci, au revoir.
5
gniourf_gniourf

Il y a toujours l'option awk. Remplacez la variable string par votre contenu. Ce n'est cependant pas un changement en place. Personnellement, j'ai tendance à ne pas faire de changements sur place. C'est définitivement une préférence personnelle. Deux éléments, -v signifie une variable dans awk et la variable n est utilisée ici pour faire correspondre un numéro de ligne, effectivement NR == 1. Vous pouvez l'utiliser de différentes façons en modifiant simplement la valeur n et s.

string="My New first line"; awk -v n=1 -v s="$string" 'NR == n {print s} {print}'     file.source > file.target

Exemple:

% cat file.source                                                                                                                                      

First Line
Second Line
Third Line

% string="Updated First Line"; awk -v n=1 -v s="$string" 'NR == n {print s} {print}' file.source > file.target; cat ./file.target                      !698

Updated First Line
First Line
Second Line
Third Line
3
slashdot

Vous pouvez utiliser Vim en mode Ex:

ex -sc '1i|hello world' -cx sources.list
  1. 1 sélectionnez 1ère ligne

  2. i insère une nouvelle ligne de texte

  3. x save and close

2
Steven Penny