Linux provides cut command for remove sections from each line of output in bash. cut command provides a mechanism to filter extract column/text from a file or standard output. Detailed examples can be found below. We have the following text file named fruits.txt

apple 1 good grape 5 bad banana 2 not bad

Syntax

cut OPTION... [FILE]...

Select Column

Cut command provides the ability to select a specified column according to character number for all rows. Here we will print all rows 3 character line by line to the console. This will only print a single character.

$ cut -c3 fruits.txt

Select Column For Character Range

In the previous example, we have printed a single character to the terminal. We can also print multiple characters to the console by specifying the character range like below. We can see that the character index starts at 1.

$ cut -c1-6 fruits.txt

Select Column Using Start Position

Another useful feature of cut is specifying only to start position up to end.

$ cut -c3- fruits.txt

Select Column Using End Position

We can print range from start to the specified position only specifying end position. This will assume start position as 1

$ cut -c-3 fruits.txt

Select Single Field

The field is some part of text delimited with specific characters like space, tab, double comma, etc. We can select text with field numbers. By default field delimiter is tab. Our text is already provided tab for delimitation. In this example, we will select 3. field.

$ cut -f3 fruits.txt

Select Multiple Fields

As we do in characters we can also specify field range. We will select fruit names and counts with the following command.

$ cut -f1-2 fruits.txt

The following example selects more than one field one by one not using ranges.

$ cut -f1,2,3 fruits.txt

Last Field

One of the most popular usages of cut is printing last field. The problem is that field count may change according to text and we can not specify the last field only using cut command. The following example uses rev command to get last field.

$ cat fruits.txt | rev | cut -f1 | rev

Select Fields Include Specified Chars

By default cut do not have the ability to exclude lines according to characters but grep can be used easily to implement this feature. We will only select rows contain app

$ grep 'app' fruits.txt | cut -f1-2

Select Fields Except for Specified Chars

We can reverse the previous example and remove unwanted rows. We will remove lines contains app and then print columns from 1 to 2 .

$ grep -v 'app' fruits.txt | cut -f1-2

Specify Delimiter

The delimiter is used to divide fields. By default, the tab is used as the delimiter. But it can be specified with -d option like below. Following the example, we use : as delimiter because the passwd file uses it. Then we only want to show user names that resides in field 1.

$ cut -d: -f1 /etc/passwd

Print Except Fields

As we see previously fields can be printed as ranges too. We can also print by excepting fields. This will print all renaming fields. Following the example, we can want to print all fields except 2.

Change Delimiter

Text may have delimiters by default. In some situations, we may want to change delimiter while printing to the console. --output-delimiter option can be used for this operation. The following example will change the tab delimiter to the comma.

$ cut -f1,2,3 --output-delimiter=',' fruits.txt