This is an old revision of the document!
Table of Contents
BASH - cut
The cut command allows cutting of sections based on byte positions, characters, or fields separated by a delimiter like the ‘-‘ or ‘:’ characters.
cut - remove sections from each line of files.
cut can return section based on number of bytes (-b), characters (-c), or fields (-f) when fields are separated by a delimiter(-d).
Default delimiter is tab.
Byte Cuts
The b option provided by the cut utility allows us to cut sections of a text-based on their byte positions.
Use the cut command with the flag -b followed by the byte numbers for this purpose.
Cut Only a Single Byte from the Input Stream
echo "cutting text from input" | cut -b 1
The above command echoes the string “cutting text from input” to the standard output and pipes it as an input to the cut command.
The cut command will cut just the first byte© from this string as only 1 was provided with the -b flag.
Cut Specific Bytes from the Input Stream
echo "cutting text from input" | cut -b 1,3
This command will only cut the first and third byte of the string “cutting text from input” and will display “ct” as its output.
Cut Range of Bytes from the Input Stream
echo "cutting text from input" | cut -b 1-12
The above command will cut the byte range 1-12 from the given string and print out “cutting text” on the standard output.
WARNING: Providing byte ranges that are outside of the string’s occupation will result in a message showing “cut: invalid byte or character range”.
Cut Only a Single Byte from the Text file
cut -b 1 test.txt
This command will display only the first bytes of each of the five rows inside the file test.txt.
It is equivalent to the command
cat test.txt | cut -b 1
Cut Specific Bytes from the Text File
cut -b 1,3 test.txt
The above command cuts only the first and third bytes of each row.
You can specify any byte numbers as long as they fall within the range of bytes available.
Cut Range of Bytes from the Text File
cut -b 1-12 test.txt
This command will output the first one to twelfth bytes of each row in the test.txt file.
You should notice the similarity of functionality this command possess with the 3rd command.
Cut Bytes in Alphabetical Order
cut -b 1-7 test.txt | sort
We can provide the output of the cut command as input to the sort command for displaying the first seven bytes of each row alphabetically.
For alphabetical sorting, the sort command doesn’t require any options.
Cut Bytes in Reverse Order
cut -b 1-7 test.txt | sort -r
This cut command will cut the first 7 bytes from each row and will output them in the reverse order.
Look how the output of the cut command is being fed to the sort command using a pipe.
Cut from a specific Byte to the End of the Input Stream
echo "cutting text from input" | cut -b 5-
The above cut command will cut the text from the fifth byte to the end of the string.
This command will come in handy when you need to cut from a specified byte position till the end of the input stream.
Simply change the value of the b flag while keeping the trailing – on.
Cut from a specific Byte to the End of a File
cut -b 5- test.txt
This command will start cutting every one of the rows of test.txt from the fifth-byte position and finish only after each row ends.
The trailing hyphen (-) is mandatory for this operation.
Cut a Specified Amount of Bytes from the beginning of a string
echo "cutting text from input" | cut -b -5
This command will cut the first five bytes of the input string.
You can cut from the starting byte to any other byte position by just replacing the value of the b flag.
Remember to add the preceding hyphen(-) else the output will not be as expected.
Cut from the First Byte to a Specified Position from a File
cut -b -5 test.txt
The above command will cut just the first five bytes of each line from the file.
Character Cuts
Cut a single character
cut -c 3 abcdef
returns:
c
Cut a range of characters
A range must be provided in each case which consists of one of N, N-M, N-(N to last) or -M (first to M)
cut -c 2-4 abcdef
Press CTRL+D to stop inputting
returns:
bcd
Cut a variety of characters
cut -c 2,4,7 alongtext
returns:
lne
Cut characters up to a specific position
cut -c -2 abcdef
returns:
ab
Cut characters from a specific position
cut -c 2- abcdef
returns:
bcdef
Cut various characters
cut -c 1,6-9,16- alongtextwithnospaces
returns:
atextspaces
Field Cuts
Cut fields from a string, using a delimiter
cut -f 2- -d ':' 23:34:45:56
NOTE: -d specifies delimiter
returns:
34:45:56
Cut fields from a string, without specifying a delimiter
cut -f 2 er rt fg wd ji
returns:
er rt fg wd ji
NOTE: cut didn't find the delimiter (default is tab) so returns whole line.
Cut fields from a string, without specifying a delimiter; and prevent printing when delimiter not found
cut -f 2 -s er rt fg wd ji
NOTE: cut wont print as -s flag is used to prevent printing when delimiter not found.
Cut fields from a file, using a delimiter
cut -d: -f1 /etc/passwd >users.txt