46 lines
1 KiB
Bash
46 lines
1 KiB
Bash
|
# Helper function for calling sed on files and checking if the
|
||
|
# file is actually changed
|
||
|
#
|
||
|
# NOTE: this will not check if the input is valid, you can problably
|
||
|
# make it execute arbirtrary commands via passing '; cmd' to a vsed
|
||
|
# call.
|
||
|
|
||
|
vsed() {
|
||
|
local files=() regexes=() OPTIND
|
||
|
|
||
|
while getopts ":i:e:" opt; do
|
||
|
case $opt in
|
||
|
i) files+=("$OPTARG") ;;
|
||
|
e) regexes+=("$OPTARG") ;;
|
||
|
*) ;;
|
||
|
esac
|
||
|
done
|
||
|
|
||
|
if [ ${#files[@]} -eq 0 ]; then
|
||
|
msg_red "$pkgver: vsed: no files specified with -i.\n"
|
||
|
return 1
|
||
|
fi
|
||
|
|
||
|
if [ ${#regexes[@]} -eq 0 ]; then
|
||
|
msg_red "$pkgver: vsed: no regexes specified with -e.\n"
|
||
|
return 1
|
||
|
fi
|
||
|
|
||
|
for rx in "${regexes[@]}"; do
|
||
|
for f in "${files[@]}"; do
|
||
|
shasums="$(sha256sum "$f" 2>/dev/null | awk '{print $1}')"
|
||
|
|
||
|
sed -i "$f" -e "$rx" || {
|
||
|
msg_red "$pkgver: vsed: sed call failed with regex \"$rx\" on file \"$f\"\n"
|
||
|
return 1
|
||
|
}
|
||
|
|
||
|
sha256sum="$(sha256sum "$f" 2>/dev/null)"
|
||
|
|
||
|
if [ "$shasums" = "${sha256sum%% *}" ]; then
|
||
|
msg_warn "$pkgver: vsed: regex \"$rx\" didn't change file \"$f\"\n"
|
||
|
fi
|
||
|
done
|
||
|
done
|
||
|
}
|