In this article, we’ll guide you through the process of creating a shell script for this purpose using common Unix utilities. We will explain each part of the script and provide a detailed example. Here’s a shell script that takes a file name as an argument and extracts all the email addresses from it.
#!/bin/bash
# Check if the user provided a file name as an argument.
if [ $# -ne 1 ]; then
echo "Usage: $0 <file_name>"
exit 1
fi
# Get the file name from the command line argument.
file_name="$1"
# Check if the file exists.
if [ ! -f "$file_name" ]; then
echo "Error: File '$file_name' not found."
exit 1
fi
# Use grep and a regular expression to extract email addresses.
email_pattern="[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,4}"
grep -E -o -w "$email_pattern" "$file_name"
Script Explanation:
Shebang (#!/bin/bash
): The first line tells the system to use the Bash interpreter to execute the script.
Argument Checking: The script checks if the user provided a single file name as an argument. If not, it displays a usage message and exits.
File Name Retrieval: It retrieves the file name from the command line argument.
File Existence Check: The script checks if the specified file exists. If not, it displays an error message and exits.
grep
Command: The grep
command is used with regular expressions (-E
) to search for email addresses in the file.
-o
: This option tells grep
to only output the matching parts of each line.
-w
: This option ensures that the match is a whole word (i.e., it doesn’t match email-like substrings within larger words).
Let’s assume you have a text file named emails.txt
containing email addresses. To extract the email addresses from this file, you can use the script as follows:
bash extract_emails.sh emails.txt