Shortcuts for adding multiple lines of text to files on Linux
There are a number of ways to add text to files on Linux systems without having to open an editor, such as the echo and printf commands. On the other hand, when you need to add A LOT of text, the technique you use can make the job tedious or a piece of cake.
This post describes some of the commands you can use and the problems and benefits you can expect.
Also see: How to loop forever in bash on Linux
The echo commands append lines of text to existing files in a straightforward way:
$ echo "text to be added to file" >> myfile $ echo "more text" >> myfile
You can also use the printf command to append text, but keep in mind that by default it will not add a newline as if you hit the Enter key. Use a command like this with the n to include it:
$ printf "appended textn" >> myfile
When you want to build a script that will add a series of lines to a file, the echo and printf methods just shown can get a bit tiresome. One option is to add multiples lines with a single echo or printf command that includes newline characters like this:
$ echo -e "text to be added to filenmore text" >> myfile
$ printf "more text to be addednand so onnand so onn" >> myfile
The -e option makes the echo command interpret the n sequences as newlines, so your file will include these lines:
$ tail -5 myfile text to be added to file more text
more text to be added
and so on
and so on
You can also just type each line separately as long as you don’t end the quote until the end of the text. This type of multi-line echo requires that you start your echo command on one line with an opening double-quote (“), add quote-free lines and then close the echo command on the last line with a closing double-quote. Here’s an example of doing this on the command line:
$ echo "There is more than one way to skin a cat > but skinned cats are never very cuddly. > You would be better off skinning a catfish and > likely less inclined to cuddle it afterwards." > cats $ cat cats There is more than one way to skin a cat but skinned cats are never very cuddly. You would be better off skinning a catfish and likely less inclined to cuddle it afterwards.
If you want to add a large amount of text, however, even the multi-line echo command above can require more effort than it’s worth. Two other options are 1) putting the text into a separate file and appending the content of that file to the one you’re updating, and 2) adding the text using a script.
Adding text using a separate file
To add text from one file to the end of another, we could first create the file to be appended. Here’s an example using the addition of a warranty disclaimer to the end of a file detailing a product:
$ cat warranty_disclaimer WARRANTY DISCLAIMER =================== The information provided about this product is not intended to provide any promise that it will work as advertised or that it will continue to work for any particular period of time. The seller accepts no responsibility for how the buyer uses it nor for any damages caused during or by its use.
Once the text file is ready, run a command like this to append it:
$ cat warranty_disclaimer >> cordless_drill
In this and earlier examples, you need to be careful not to overwrite the target file by using a single “>”.
Adding text using a script
Another option is to add the lines using a script. For this, you can use a multi-line echo command like one of those shown above.
The example script below uses this technique to add the warranty disclosure to any file provided as an argument to the script or provided at the prompt:
#!/bin/bash if [ $# != 1 ]; then echo -n "file name> " read filename else filename=$1 fi if [ ! -f $filename ]; then echo "No such file: $filename" exit fi echo " WARRANTY DISCLAIMER =================== The information provided about this product is not intended to provide any promise that it will work as advertised or that it will continue to work for any particular period of time. The seller accepts no responsibility for how the buyer uses it nor for any damages caused during or by its use. " >> $filename
If you have a file that ends like this:
$ tail -2 cordless_drill Use this product to drill holes in things. Be careful not to drill holes in
your pets or fragile objects that might break.
You can add the disclaimer like this:
$ add_disclaimer cordless_drill
Verify the additional lines like this:
$ tail -10 cordless_drill Use this product to drill holes in things. Be careful not to drill holes in
your pets or fragile objects that might break. WARRANTY DISCLAIMER =================== The information provided about this product is not intended to provide any promise that it will work as advertised or that it will continue to work for any particular period of time. The seller accepts no responsibility for how the buyer uses it or for any damages caused during or by its use.
One benefit of this approach is that you can easily insert your text into the script without adding commands. Just put it between the first echo and the redirection line.
Note that the script shown above includes checks to see that a file name was specified and, if not, prompts for one. It also checks to ensure that the specified file exists.
Scripts like this are a good option whenever you need to append lines of text to a lot of files.
Wrap-Up
There are many ways to append text to files on Linux, but to add a lot of lines, a script is likely one of your better options, especially if you need to do this repeatedly. You can use a script that includes the multi-line echo command as detailed above to add any amount of text to files.
Copyright © 2021 IDG Communications, Inc.