27 lines
470 B
Bash
27 lines
470 B
Bash
#!/bin/sh
|
|
usage() {
|
|
echo 'usage: tac [-b] [-s separator] [file ...]' >&2
|
|
exit 64
|
|
}
|
|
bflag=
|
|
rs='\n'
|
|
while getopts bs: opt; do
|
|
case "$opt" in
|
|
b) bflag=1;;
|
|
s) rs="$OPTARG";;
|
|
*) usage;;
|
|
esac
|
|
done
|
|
shift $((OPTIND - 1))
|
|
rs="$(printf %s "$rs" | sed 's/[][)(}{.+?*^$]/\\&/g')"
|
|
awk -vRS="$rs" -vORS="$rs" -vb="$bflag" '{
|
|
a[NR] = $0
|
|
} END {
|
|
if (b)
|
|
for (i = NR; i > 0; i--)
|
|
printf "%s%s", ORS, a[i]
|
|
else
|
|
for (i = NR; i > 0; i--)
|
|
printf "%s%s", a[i], ORS
|
|
}' "$@"
|