Bash, the powerful command-line interface for Linux and Unix systems, goes beyond basic commands with tools like sed (stream editor) and awk. These utilities offer sophisticated text processing capabilities, transforming your scripts from simple automation to data manipulation powerhouses.
Sed: Editing Text Streams
Sed operates on text streams, modifying them based on commands you provide. Think of it as a command-line text editor that works line by line.
Key Sed Commands
- Substitute (
s): The most common command, it replaces text patterns with new values. - Delete (
d): Removes lines matching a pattern. - Print (
p): Outputs specific lines (often used with-nto suppress default output). - Append (
a): Adds text after a line matching a pattern. - Insert (
i): Adds text before a line matching a pattern.
Example: Substitute and Print
echo "hello world" | sed 's/hello/hi/' # Output: hi world
sed -n '/pattern/p' file.txt # Print lines containing 'pattern'
Awk: Programming with Text
Awk is a full-fledged scripting language designed for text processing. It can perform calculations, manipulate data structures, and generate reports.
Awk Fundamentals
- Fields (
$1,$2, …): Awk automatically divides input into fields (words) based on separators (usually whitespace). - Records (
$0): The entire line of input is considered a record. - Patterns and Actions: Awk scripts consist of patterns to match and actions to take when a match occurs.
Example: Field Manipulation
awk '{print $1, $3}' file.txt # Print the first and third field of each line
Example: Calculations
awk '{sum += $2} END {print sum}' numbers.txt # Sum the second field of each line
Combining Sed and Awk for Advanced Scripting
ps -ef | awk '{print $2}' | sed 's/^/PID: /'
This pipeline demonstrates the combined power of awk and sed:
ps -ef: Lists running processes.awk '{print $2}': Extracts the second field (process ID).sed 's/^/PID: /': Prepends “PID: ” to each line.
Real-World Applications
- Log Analysis: Extract relevant information from log files, summarize data, and create reports.
- Data Cleanup: Modify and reformat data in CSV files or other formats.
- Text Generation: Create customized reports and output formats.
Example: In-Place File Editing (Sed)
sed -i 's/old_text/new_text/g' file.txt
Explanation:
This command modifies the file file.txt directly, replacing all instances of old_text with new_text using the -i flag. The ‘g’ ensures global replacement across the whole file.
Example: Filtering and Transformation (Awk)
awk '/error/ {print $5, $6}' logfile.txt
Explanation:
This command filters a log file for lines containing the word “error” and extracts the fifth and sixth fields from those lines, providing a targeted view of error-related information.