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



Question:

I want to insert text at the top of an already existing file. How can I achieve this. I tried echo and tee but was not successful.

I was trying to insert repo line at the top of sources.list file from terminal.

Note

I need an one line quick solution, because another answer's method was known to me already


Solution:1

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.


Solution:2

./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  


Solution:3

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 :-)


Solution:4

And why not use a genuine text editor for that? ed is the standard text editor.

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

Or, if you want the commands to be more readable:

ed -s filename < <(printf '%s\n' 1i "FIRST LINE" . wq)  
  • 1: go to firstline
  • i: insert mode
  • your stuff you want to insert...
  • .: stop inserting, go back to normal mode
  • wq: write and quit, thank you, good bye.


Solution:5

There is always the awk option. Replace string variable with your contents. This is not an in-place change though. Personally, I tend to not make in-place changes. This is definitely a personal preference. Two things, -v signifies a variable in awk and variable n is used here to match a line number, effectively NR == 1. You could use this in any number of ways just by changing the value of n and s.

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

Example:

% 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  


Solution:6

You can use Vim in Ex mode:

ex -sc '1i|hello world' -cx sources.list  
  1. 1 select 1st line

  2. i insert new line of text

  3. x save and close


Note:If u also have question or solution just comment us below or mail us on toontricks1994@gmail.com
Previous
Next Post »