#! /bin/sed -nf
# This script replaces cat -n; the trick is to save the *next* line
# number in hold space, printing the line soon so that we can then
# discard the pattern space
x
/^$/ {
# Prime the pump
s/^.*$/1/
}
# Add the correct line number before the pattern
G
h
s/^/ /
s/^ *\(......\)\n/\1 /p
# move the line number only to hold space, and add a
# zero if we're going to add a digit on the next line
x
s/\n.*$//
/^9*$/ s/^/0/
# separate changing/unchanged digits with an x
s/.9*$/x&/
# keep changing digits in hold space
h
s/^.*x//
y/0123456789/1234567890/
x
# keep unchanged digits in pattern space
s/x.*$//
# compose the new number, remove the new-line implicitly added by G
G
s/\n//
h