The cut command extracts certain portion of text from each line of input string or from a file by characters, delimiter, complement, and fields options.
I have created dummy content for you to test all the above options.
1
2
3
4
5
6
Welcome to Ubuntu 18.04.5 LTS (GNU/Linux 4.15.0-117-generic x86_64)
root:x:0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/bin/sh
bin:x:2:2:bin:/bin:/bin/sh
sys:x:3:3:sys:/dev:/bin/sh
sync:x:4:65534:sync:/bin:/bin/sync
Get options listed above and put them one by one to the following structure.
You have 3 options to run the cut
command. In this article, I will be using option 1 most of the time but you are free to choose other options as well.
1
2
3
4
5
6
7
8
# option 1
cut [options] filename.txt
# option 2
cat filename.txt | cut [options]
# option 3
<ANY_LINUX_COMMAND> | cut [options]
To extract specific characters only, use -c
option. The following command will return the second character of each line.
1
cut -c 2 filename.txt
To extract specific characters between 3 to 7 range can also be done with -c
option by specifying start and end position delimited with a hyphen -
. The following command extracts characters between 3 to 7 range of each line.
Note: start or end position both are optional. I will show you in a bit.
1
cut -c 3-7 filename.txt
To print everything except characters between 3 to 7 range, use --complement
with -c
options.
1
cut --complement -c 3-7 filename.txt
To extract from the 7th character to the end of each line can also be done with -c
option. In the following command end position is optional.
1
cut -c 7- filename.txt
To extract from the beginning till 7th characters of each line can also be done with -c
option. In the following command, start position is optional.
1
cut -c -7 filename.txt
To extract an entire field, you can combine -d
and -f
options.
-
-f
number of fields you want to extract. -
-d
which field delimiter you want to use to extract.
Run the following command to get the 1st field of each line by using :
(colon) as the field delimiter.
1
cut -d ':' -f 1 filename.txt
To extract multiple fields use comma-separated value ,
. The following command extract 1st, 3rd, and 7th fields.
1
cut -d ':' -f 1,3,7 filename.txt
To extract a range of fields uses hyphen separated value -
. The following command extracts fields between 2 to 6 range of each line.
1
cut -d ':' -f 2-6 filename.txt
To extract multiple fields separated by comma ,
+ range of fields separated by a hyphen -
which will return 1 through 4, 6, and 7 fields as follows.
1
cut -d ':' -f 1-4,6,7 filename.txt
To extract from 7th field to end of each line. In the following command end position is optional.
1
cut -d ':' -f 7- filename.txt
To extract from beginning till 7th field of each line. In the following command, start position is optional.
1
cut -d ':' -f -7 filename.txt
To change the default delimiter, use --output-delimiter
option. In the following command, find :
(colon) and replace it with #
(hash) delimiter.
1
cut -d ':' -f 1,6,7 --output-delimiter='#' filename.txt
You can also replace each field with \n
newline instead of #
hash.
1
cut -d ':' -f 1,6,7 --output-delimiter=$'\n' filename.txt