How do I insert a line at the top of a text file using the command line?

It's actually quite easy with sed:

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

  • 1i tells sed to insert the text that follows at line 1 of the file; don't forget the \ newline at the end so that the existing line 1 is moved to line 2.


In general editing in place with a script is tricky, but you can use echo and cat and then 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

However if you're playing with sources.list you need to add in some validation and bullet-proofing to detect errors etc because you really don't want to loose this. But that's a separate question :-)


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

known that prepend is my custom shell:

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

Use also a relatif path or absolute path , it should work fine :

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

Update :

if you want a permanent script for this , open nano /etc/bash.bashrc then add this function at the end of file:

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

}

Reopen you terminal and enjoy :

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