Red Hat Enterprise Linux 3: Red Hat Enterprise Linux Step By Step Guide
Prev | Chapter 3. Shell Prompt Basics | Next

# 3.10. More Commands for Reading Text Files

You have already been introduced to several basic shell prompt commands for reading files in text editors. Here are a few more.

## 3.10.1. The `head` Command

You can use the `head` command to look at the beginning of a file. The command is:

    head <filename>

`head` can be a useful command, but because it is limited to the first several lines, you cannot see how long the file actually is. By default, you can only read the first ten lines of a file. You can change the number of lines displayed by specifying a number option as shown in the following command:

    head -20 <filename>

## 3.10.2. The `tail` Command

The reverse of `head` is `tail`. Using `tail`, you can view the last ten lines of a file. This can be useful for viewing the last 10 lines of a log file for important system messages. You can also use `tail` to watch log files as they are updated. Using the `-f` option, `tail` automatically prints new messages from an open file to the screen in real-time. For example, to actively watch `/var/log/messages`, type the following at a shell prompt as the root user:

    tail -f /var/log/messages

## 3.10.3. The `grep` Command

The `grep` command is useful for finding specific character strings in a file. For example, if you want to find every reference made to "coffee" in the file `sneakers.txt`, you would type:

    grep coffee sneakers.txt

Each line in that file where the word "coffee" is found is displayed.

| Tip
| Unless otherwise specified, `grep` searches are case sensitive. That means that searching for Coffee is different than searching for coffee. Among `grep`'s options is `-i`, which allows for a case-insensitive search through a file. Read the `grep` man page for more about this command.

## 3.10.4. I/O Redirection and Pipes

You can use pipes and output redirection when you want to store and/or print information to read at a later time.

You can, for example, use `grep` to search for particular contents of a file, then have those results either saved as a file or sent to a printer.

To print information about references to "coffee" in `sneakers.txt`, for example, type:

    grep coffee sneakers.txt | lpr

## 3.10.5. Wildcards and Regular Expressions

What if you forget the name of the file you are looking for? Using wildcards or regular expressions, you can perform actions on a file or files without knowing the complete file name. First type out what you know, and then substitute the remainder with a wildcard. Wildcards are special symbols that can be substituted for letters, numbers, and symbols. Wildcards make finding particular directories and files easier than examining long directory listings to find what you are searching for.

| Tip
| To read more about wildcards and regular expressions, take a look at the `bash` man page (`man bash`). Remember that you can save the file to a text file by typing `man bash | col -b > bash.txt`. Then, you can open and read the file with `less` or with an editor such as `vi` (`vi bash.txt`). If you want to print the file, be aware that it is quite long.

To find a file is called "sneak`something`.txt," type:

    ls sneak*.txt

The name of the file appears:

    sneakers.txt

You will probably use the asterisk (`*`) most frequently when you are searching. The asterisk searches out everything that matches the pattern you are looking for. By typing

    ls *.txt

or

    ls sn*

you would find `sneakers.txt` and any other files whose name ends with `.txt` or begins with `sn`. The asterisk helps to narrow your search as much as possible.

Another way to narrow a search is to use the question mark symbol (`?`). Like the asterisk, using `?` can help locate a file matching a search pattern.

In this case, though, `?` is useful for matching a single character, so if you were searching for `sneaker?.txt`, you would get `sneakers.txt` as a result, and/or `sneakerz.txt`, if there were such a file name.

Regular expressions are more complex than the straightforward asterisk or question mark.

When an asterisk, for example, just happens to be part of a file name, as might be the case if the file `sneakers.txt` was called `sneak*.txt`, that is when regular expressions can be useful.

Using the backslash (`\`), you can specify that you do not want to search out everything by using the asterisk, but you are instead looking for a file with an asterisk in the name.

If the file is called `sneak*.txt`, type:

    sneak\*.txt

Here is a brief list of wildcards and regular expressions:

- `*` — Matches all characters

- `?` — Matches one character

- `\*` — Matches the * character

- `\?` — Matches the ? character

- `\)` — Matches the ) character

Prev | Home | Next
Pipes and Pagers | Up | Command History and Tab Completion