52 lines
1.8 KiB
Bash
Executable File
52 lines
1.8 KiB
Bash
Executable File
#!/bin/bash
|
|
|
|
# Display help if requested
|
|
if [[ "$1" == "-h" || "$1" == "--help" ]]; then
|
|
echo "Usage: $(basename "$0") [OPTIONS]"
|
|
echo
|
|
echo "Reads 'oldpattern => newpattern' pairs from STDIN and replaces all occurrences"
|
|
echo "of oldpattern with newpattern in all .c and .h files in the current directory"
|
|
echo "and its subdirectories."
|
|
echo
|
|
echo "OPTIONS:"
|
|
echo " -h, --help Display this help and exit"
|
|
echo
|
|
echo "EXAMPLES:"
|
|
echo " cat patterns.txt | $(basename "$0")"
|
|
echo " $(basename "$0") < patterns.txt"
|
|
echo
|
|
echo " Or interactively:"
|
|
echo " $(basename "$0")"
|
|
echo " oldFunction => newFunction"
|
|
echo " oldStruct => newStruct"
|
|
echo " [Ctrl+D to end input]"
|
|
exit 0
|
|
fi
|
|
|
|
# Process each line from STDIN
|
|
while IFS= read -r line; do
|
|
# Skip empty lines
|
|
if [[ -z "$line" ]]; then
|
|
continue
|
|
fi
|
|
|
|
# Check if the line contains "=>"
|
|
if echo "$line" | grep -q "=>"; then
|
|
# Extract old and new patterns
|
|
oldpattern=$(echo "$line" | cut -d "=" -f 1 | sed -e 's/^[[:space:]]*//' -e 's/[[:space:]]*$//')
|
|
newpattern=$(echo "$line" | cut -d ">" -f 2 | sed -e 's/^[[:space:]]*//' -e 's/[[:space:]]*$//')
|
|
|
|
# Escape special characters for sed
|
|
oldpattern_escaped=$(echo "$oldpattern" | sed 's/[\/&]/\\&/g')
|
|
newpattern_escaped=$(echo "$newpattern" | sed 's/[\/&]/\\&/g')
|
|
|
|
# echo "Replacing: '$oldpattern' with '$newpattern'"
|
|
|
|
# Execute the find and sed command
|
|
find . -name "*.[ch]" -exec sed -i "s/$oldpattern_escaped/$newpattern_escaped/g" {} \;
|
|
else
|
|
echo "Warning: Line does not match the 'oldpattern => newpattern' format: $line" >&2
|
|
fi
|
|
done
|
|
|
|
# echo "All replacements completed!" |