How can I display the contents of a text file on the command line?
I would like to display the contents of a text file on the command line. The file only contains 5-6 characters. Is there an easy way to do this?
You can use following command to display content of a text file.
Since your file is short, you can use
If you have to view the contents of a longer file, you can use a pager such as
You can make
less behave like
cat when invoked on small files and behave
normally otherwise by passing it the
less -FX filename
I have an alias for
less -FX. You can make one yourself like so:
alias aliasname='less -FX'
If you add the alias to your shell
configuration, you can use it
If your file contains strange or unprintable characters, you can use
od to examine the characters. For example,
$ cat file (ÐZ4 ?o=÷jï $ od -c test 0000000 202 233 ( 320 K j 357 024 J 017 h Z 4 240 ? o 0000020 = 367 n 0000023
I always use
$ less "your file here" , as it is very simple, provides a built in interactive
grep command, and gives you an easy to use interface that you can scroll with the arrow keys.
(It is also included on nearly every *nix system)
Tools for handling text files on unix are basic, everyday-commands:
In unix and linux to print out whole content in file
For last few lines
For first few lines
If its a large file, and you want to search some specific part, you can use
cat filename | grep text_to_search -ni
Also you can use more interactive Vim editor (or vi editor if you do not have Vim):
vim filename Or vi filename
Vim/vi is a great editor, can also be used as a reader in “Normal Mode” or using -R option, it has many features that will help you in browsing through the file.
cat command to display the content of filename.
vim command to edit file.
Even though everybody uses
cat filename to print a files text to the standard output first purpose is concatenating.
From cat’s man page:
cat – concatenate files and print on the standard output
Now cat is fine for printing files but there are alternatives:
echo "$(<filename)" or printf "%s" "$(<filename)"
( ) return the value of an expression, in this case the content of filename which then is expanded by
This does exactly what you want and is easy to remember.
Here is an example that lets you select a file in a menu and then prints it.
#!/bin/bash select fname in *; do # Don't forget the "" around the second part, else newlines won't be printed printf "%s" "$(<$fname)" break done
One option is to use
However it does not have all the feature added by
One simple example is that you can’t scroll back up in the output. Generally it has been superceeded by less – which was named in jest because
less is more
~$ perl -pe '' Sonnet_18.txt
~$ raku -pe '' Sonnet_18.txt
Shall I compare thee to a summer’s day? Thou art more lovely and more temperate. Rough winds do shake the darling buds of May, And summer’s lease hath all too short a date. Sometime too hot the eye of heaven shines, And often is his gold complexion dimmed; And every fair from fair sometime declines, By chance or nature’s changing course untrimmed. But thy eternal summer shall not fade Nor lose possession of that fair thou ow’st, Nor shall Death brag thou wand’rest in his shade, When in eternal lines to time thou grow’st. So long as men can breathe or eyes can see, So long lives this, and this gives life to thee.
cat is going to be the most popular answer to this question, but the code examples above will also provide the desired output (file courtesy of Shakespeare, via Project Gutenberg). However learning basic one-liners using Perl and/or Raku has its merits, simply because you can get an awful lot of work done with them.
Grep through a file, return matching lines:
~$ #Perl: ~$ perl -ne 'print if /eternal/' Sonnet_18.txt But thy eternal summer shall not fade When in eternal lines to time thou grow’st. ~$ #Raku: ~$ raku -ne '.put if /eternal/' Sonnet_18.txt But thy eternal summer shall not fade When in eternal lines to time thou grow’st.
Substitute one bit of text with another, redirect output to a new file:
~$ #Perl: ~$ perl -pe 's/eternal/forevermore/g' Sonnet_18.txt > new_sonnet.txt ~$ #Raku: ~$ raku -pe 's:g/eternal/forevermore/' Sonnet_18.txt > new_sonnet.txt