Table of Contents
- Introduction
- What is the Linux cut Command?
- Why Use the Linux cut Command?
- Syntax and Options
- Selecting Fields
- Selecting Characters
- Selecting Bytes
- Working with Delimiters
- Using cut with Standard Input and Pipes
- Combining cut with Other Commands
- Practical Examples
- Automation and Scripting
- Performance and Limitations
- Security Tips
- Best Practices
- Frequently Asked Questions (FAQs)
- Conclusion
Introduction
If you regularly work with text files or command outputs on Linux, the Linux cut command is a helpful tool to have in your toolkit. Whether you’re managing systems, writing code, or analyzing data, cut makes it easy to pull out, trim, and organize the information you need. This guide will walk you through everything from the basics to more advanced uses, offering clear explanations and real-world examples to help you get the most out of Linux cut command. You’ll learn everything you need to know about cut, from basic usage to advanced scripting, with practical examples along the way.
What is the Linux cut Command?
The Linux cut command command in Linux is a text processing tool that enables you to extract specific portions from each line of a file or input stream, based on criteria like fields, characters, or bytes. You can select data by field, character, or byte, making cut ideal for parsing logs, CSV files, configuration files, and command outputs.
Why Use the Linux cut Command?
-
Fast and lightweight, suitable for even huge files.
-
Works well in scripts and with pipes.
-
Allows precise extraction of columns, fields, or character ranges.
-
Essential for automating data extraction and reporting.
Syntax and Options
The basic syntax for Linux cut command is:
cut OPTION… [FILE]…
If you do not specify a file, Linux cut command reads from standard input.
Common options include:
-
-f, –fields=LIST: Select fields by delimiter
-
-d, –delimiter=DELIM: Specify the field separator (default is TAB)
-
-c, –characters=LIST: Select character positions
-
-b, –bytes=LIST: Select byte positions
-
–complement: Output everything except the specified fields, characters, or bytes
-
-s, –only-delimited: Skip lines without delimiters
-
–output-delimiter=STRING: Set a custom output separator
You can use single numbers, comma-separated lists, or ranges (for example, 1-3,5,7-9).
Selecting Fields
The most common use of Linux cut command is to extract fields from delimited text files.
Extract the second column from a CSV file:
cut -d’,’ -f2 data.csv
Select multiple fields:
cut -d’,’ -f1,3,5 data.csv
Select a range of fields:
cut -d’,’ -f2-4 data.csv
Selecting Characters
You can extract specific character positions from each line.
Extract the first eight characters of every line:
cut -c1-8 file.txt
Extract multiple characters:
cut -c1,5,10-12 file.txt
Selecting Bytes
The cut command can extract bytes from each line, which is especially useful for binary or non-UTF-8 data.
Extract the first ten bytes of every line:
cut -b1-10 file.bin
Note: Byte selection may not work as expected with multibyte (UTF-8) characters.
Working with Delimiters
By default, cut uses the TAB character as the delimiter. To use a different separator, specify it with the -d option.
Extract fields from semicolon-separated lines:
cut -d’;’ -f2-3 data.txt
Extract fields from tab-delimited files:
cut -d$’\t’ -f1,4 data.tsv
Set a custom output delimiter:
cut -d’,’ -f1,3 –output-delimiter=’ | ‘ data.csv
Using cut with Standard Input and Pipes
cut is mighty in pipelines, allowing you to process output from other commands.
Extract specific columns from process output:
ps aux | cut -c1-10,35-50
Count the most frequent IP addresses in a log:
cat access.log | cut -d’ ‘ -f1 | sort | uniq -c | sort -nr | head
Extract fields from lines containing “error”:
grep “error” syslog | cut -d’ ‘ -f2-5
Combining cut with Other Commands
The cut command integrates seamlessly with other command-line utilities like grep, awk, sed, sort, and uniq to enable powerful and flexible text processing workflows.
Extract and list unique pairs from SSH log entries:
grep “ssh” /var/log/auth.log | cut -d’ ‘ -f1,3 | sort | uniq
Count the frequency of values in a CSV column:
cat data.csv | cut -d’,’ -f2 | sort | uniq -c | sort -nr
Practical Examples
Extract usernames from /etc/passwd:
cut -d’:’ -f1 /etc/passwd
Get the second column from a CSV:
cut -d’,’ -f2 users.csv
Extract multiple fields:
cut -d’,’ -f1,4,5 data.csv
Get the first 15 characters of each line:
cut -c1-15 report.txt
Extract bytes from binary data:
cut -b1-8 binaryfile.bin
Skip lines without a delimiter:
cut -d’,’ -f2- -s data.csv
Custom output delimiter:
cut -d’:’ -f1,7 /etc/passwd –output-delimiter=” | “
Extract fields from piped output:
cat /etc/passwd | cut -d’:’ -f1,3
Chain with awk for advanced processing:
cut -d’,’ -f2 data.csv | awk ‘{print toupper($0)}’
Extract specific characters and fields:
cut -c1-5,10-12 file.txt | cut -d’,’ -f2
Automation and Scripting
cut is a staple in shell scripts for automating data extraction and manipulation.
Simple script to extract usernames and write them to a file:
#!/bin/bash
cut -d’:’ -f1 /etc/passwd > usernames.txt
Loop through CSV users:
#!/bin/bash
while read line; do
user=$(echo “$line” | cut -d’,’ -f1)
echo “Processing user: $user”
done < users.csv
You can schedule such scripts with cron for regular reports.
Performance and Limitations
-
Very fast and efficient, even for large files
-
Only supports single-character delimiters (for multi-character, use awk or perl)
-
Does not support regular expressions
-
Byte and character selection may not work as expected with multibyte encodings
-
Cannot rearrange fields, only extract them in the specified order
Security Tips
-
Continuously validate and sanitise input before processing with cut
-
Be careful when handling files from untrusted sources
-
Do not process sensitive data without proper access controls
-
Check file permissions and avoid exposing confidential information in scripts
Best Practices
-
Use clear and consistent delimiters in your data files
-
Document your scripts and commands for future reference
-
Test cut with sample data before running on production files
-
Combine cut with other tools for maximum flexibility
-
Use -s to suppress lines without delimiters when needed
-
Prefer field selection over character or byte selection for structured data
Frequently Asked Questions (FAQs)
What does the Linux cut command do?
It extracts specific fields, characters, or bytes from lines of text.
Can the Linux cut command handle multi-character delimiters?
No, only single-character delimiters. Use awk for more complex splitting.
How do I extract multiple columns?
Use a comma-separated list with the -f option, like -f 1,3,5.
What if a line lacks the delimiter?
By default, cut outputs the whole line. Use -s to suppress such lines.
Can cut process binary files?
Yes, with -b, but be careful with multibyte encodings.
Does the Linux cut command modify the original file?
No, it only reads and outputs data.
How do I use the Linux cut command with pipes?
Pipe data into cut, for example: cat file | cut -d’,’ -f2.
Is cut available on all Linux systems?
Yes, it is included in the GNU Coreutils package and is available on all major Linux distributions.
Can I use cut in shell scripts?
Absolutely. It is commonly used for automation and batch processing.
How do I change the output delimiter?
Use –output-delimiter to set a custom separator.
What is the difference between -c and -b?
-c selects characters, -b selects bytes.
Can you cut and extract the last field?
No, but you can use awk ‘{print $NF}’ for that purpose.
How do I extract a range of fields?
Use a dash, like -f2-4, to get fields 2, 3, and 4.
Does cut support regular expressions?
No, it does not. Use awk or sed for their regular expression (regex) features.
Can I remove fields with cut?
Yes, with –complement, you can output all fields except the specified ones.
What file formats does cut support?
Any plain text file, including CSV, TSV, and log files.
How do I extract fields from tab-delimited files?
Use -d$’\t’ to specify a tab as the delimiter.
Can I use cut with standard input?
Yes, when no file is specified, cut reads from standard input.
Conclusion
Getting comfortable with the cut command can make a real difference when working with text files on Linux. Its simple syntax and handy features let you pull out the information you need, automate repetitive chores, and keep your workflow running smoothly. By adding cut to your regular set of tools, you’ll find text processing tasks become much easier and more efficient.
If you’d like to dive deeper or see all the options available, check out the official GNU Coreutils cut manual:
https://www.gnu.org/software/coreutils/manual/html_node/cut-invocation.html