Working with Text Files from Raspberry PI Terminal: a Beginners Guide
Last updated on May 23rd, 2023
Editing text files on Raspberry PI (like .txt or .conf files) may appear a tricky job for those that are moving their first steps on a Linux terminal. It is necessary for people wishing to get the best performance from the RPI computer board when using a headless Raspberry PI OS Lite. This OS requires fewer resources as it doesn’t come with a desktop environment, but you must know how to create and edit text objects. Here I will give you the basic usage examples, while you can get the full options for any Linux “command”, by typing the terminal with:
So, for example, you can get the full options of the “cat” command by typing:
This tutorial will show you the main tools available from the OS without the need of installing any package, and I bet that in the end, you will love these tricks and often prefer it to a visual text editing application. I’m not going to explain how to move between folders or remove/copy files, as I assume that the reader has already these minimal skills.
By the way, I also will use this tutorial as my personal notepad for collecting terminal tricks to work with files on the terminal. Anyone wishing to contribute by suggesting more commands and tricks will be welcome and can suggest both using the comment area at the end of this post or by emailing me.
What We Need
As usual, I suggest adding from now to your favourite e-commerce shopping cart all the needed hardware, so that at the end you will be able to evaluate overall costs and decide if continue with the project or remove them from the shopping cart. So, hardware will be only:
- a Raspberry PI computer board (including proper power supply or using a smartphone micro USB charger with at least 3A)
- high speed micro SD card (at least 16 GB, at least class 10)
Please prepare your Operating System. I suggest you try the Raspberry PI OS Lite, but you can also use these tools and examples with Raspberry PI OS Desktop (in this case working from its internal terminal).
Also, after any fresh installation, I suggest making sure your os is up to date. From the terminal, please use the following command:
sudo apt update -y && sudo apt upgrade -y
I’m not going to explain it, but many beginners could find new that in Raspberry PI terminal (as well as in all the Linux terminals) you can fastly complete your commands and filenames typing by using the TAB key from your keyboard after one or few initial letters. Moreover, double tapping on TAB shows all the available options when more than one command/file has the same starting chars as the ones typed.
Nano is the most basic tool to manage text files with the Raspberry PI terminal.
It is really simple to understand for beginners, at least compared with many older-style text editors like “vi”.
Basically, opening a file with nano doesn’t require any option. Moreover, if the file doesn’t exists nano will create a new file with the specified filename. From the terminal:
This will open the nano editor, where you can write new text as with any notepad application:
More advanced options are available with shortcuts as shown in the bottom part of the editor. For example, the CTRL+X will trigger the file exit, after choosing if you want to save the file (prompted only if you modified something here).
Other common shortcuts are CTRL+W, to search for text in the file, and CTRL+K (to cut an entire line). If you reached your Raspberry PI terminal with SSH software like Putty, you don’t need to use copy or paste shortcuts, as the mouse selection copies by default the selected text and the right click will paste what was previously copied at the cursor prompt point.
Moreover, by using the “-m” option:
nano -m peppe8o-test.txt
you will be able to use the mouse to move the cursor prompt.
Let’s use it to write the following 2 new rows in the file:
this is the first line # this is the second line
You will note that the second line has a different color: the reason is that, in Linux files, rows starting with the hashtag char (“#”) are comments and must not execute in programs. Besides explaining the program parts, it is a common practice to use comments also to unselect configurations without completely deleting the syntax. In this way, if you want to re-enable that configuration line in the future, you can simply uncomment the row without the need to remember the exact variable name as it remains there.
Close the file (CTRL+X) and save (press Y, then press RETURN).
The cat command displays the contents of a file on the terminal. It’s really useful to show what’s configured into a file and/or what’s happening in a log without opening it, so avoiding permission conflicts with programs that may use it and without risking unwanted accidental edits.
To use the cat command, simply type “cat” followed by the name of the file you want to display. Back to our example:
will give us the following result:
pi@raspberrypi:~ $ cat peppe8o-test.txt this is the first line # this is the second line
You can also refer to multiple filenames after the cat command, resulting in the output concatenating all the files together:
cat file1 file2 file3 file4
For very long files, you can split the cat output into multiple pages by adding the pipe char (“|”) and the more command. This will allow you to move between pages with the SPACE key of your keyboard.
cat file | more
Grep is another powerful text editor that is used to search for patterns in a file or stream. To use grep, simply type “grep” followed by the pattern you want to search for, followed by the name you want to search.
For example, if you want to search for the word “first” in our test file, you would type the following (with result):
pi@raspberrypi:~ $ grep first peppe8o-test.txt this is the first line
the pattern found in our file will be highlighted with a different color.
It is important to note that searching for a string with spaces requires using brackets:
pi@raspberrypi:~ $ grep "first line" peppe8o-test.txt this is the first line
The pattern can use also regex strings. For example, the regex char “^” means the start of a line, but doesn’t specify which character. We can use it to find lines starting with a specified string or char:
pi@raspberrypi:~ $ grep ^# peppe8o-test.txt # this is the second line
By the way, the previous command finds all the comments from a file.
Grep also allows using of reverse logic, excluding all the lines with the specified pattern. This is useful to show a configuration file excluding all the commented options and comments. To do it, we use the “-v” grep option:
pi@raspberrypi:~ $ grep -v ^# peppe8o-test.txt this is the first line
Sed is my favourite tool for preparing bash scripts, which allows me to automate the editing of text files in Raspberry PI. It’s a powerful text editor that is used to perform text transformations on a file or stream.
The basic usage of sed is substituting a pattern with a string. This requires specifying a string with the operations to perform and the file name. The operations string can be formed with 4 parameters. For example, the ‘s/dog/cat/g’ string means:
- the ‘s’ stands for substitute
- ‘dog’ is the search pattern
- ‘cat’ is the replacement pattern
- ‘g’ stands for global (which means replace all occurrences)
Back to our test, the following command will replace all the occurrences of the word “line” with the word “test”, showing the result:
pi@raspberrypi:~ $ sed 's/line/test/g' peppe8o-test.txt this is the first test # this is the second test
It is important that this command doesn’t edit the original file:
pi@raspberrypi:~ $ cat peppe8o-test.txt this is the first line # this is the second line
In order to get the modification “in-place” (so, getting the file effectively modified), we need to use the “-i” option:
pi@raspberrypi:~ $ sed -i 's/line/test/g' peppe8o-test.txt pi@raspberrypi:~ $ cat peppe8o-test.txt this is the first test # this is the second test
Sed is also capable to append a line after the line with the specified pattern. In this case, the operations string has the following syntax: ‘/pattern to search/ a\ Line to append’. This will execute the append operation on all the occurrences. With our text example:
pi@raspberrypi:~ $ sed '/first test/ a\this is a new test' peppe8o-test.txt this is the first test this is a new test # this is the second test
Again, note that the missing “-i” option from this command leaves the file as the original. You can use it to make the change in place.
You can also insert the line before the specified pattern. The sintax is similar to the append one, by changing the “a\” with “i\” inside the operations string:
pi@raspberrypi:~ $ sed '/first test/ i\this is a new test' peppe8o-test.txt this is a new test this is the first test # this is the second test
You can achieve a quite similar result by specifying the line number instead of the pattern, if you already know the exact line where to perform the change. In this case, you will specify the line number instead of the For example, appending the same text after the 2nd line can be also done with the following:
pi@raspberrypi:~ $ sed '2 a\this is a new test' peppe8o-test.txt this is the first test # this is the second test this is a new test
Or you can perform your text operation at the end of the file, with the “$” operator:
pi@raspberrypi:~ $ sed '$ a\this is the new last line' peppe8o-test.txt this is the first test # this is the second test this is the new last line
The Word Count tool allows you to make simple counts on file content. It’s useful when you want to just check the number of words contained in a file or the number of lines of the file. Let’s see an example with our original “peppe8o-test.txt” file:
pi@raspberrypi:~ $ wc peppe8o-test.txt 2 11 49 peppe8o-test.txt
It returns 4 results:
- The first output (“2” in the example) is the count of lines
- The second output (“11” in the example) is the words count
- The third output (“49” in the example) is the byte size of the file
of course, the Linux world is so huge that there are hundreds of terminal tools able to change your life when editing text files with Raspberry PI. So, if you want to suggest more for beginners, please email me or write in the following comment area to keep this tutorial more and more complete and useful.
Are you interested in more projects with your RPI computer board? Take a look at peppe8o Raspberry PI computer tutorials pages.
We are sorry that this post was not useful for you!
Let us improve this post!
Tell us how we can improve this post?