sed
é muito poderoso para editar arquivos a partir de scripts de shell. Com sua ajuda, você pode editar como quiser um arquivo de texto. Dito isso, o script a seguir pode fazer o que você deseja:
#!/bin/bash
#check if a file is given as argument
if [ $# -ne 1 ];then
echo "Usage: 'basename $0' FILE NAME"
exit 1
fi
sed -i 's/^\s*./\U&\E/g' $@ #capitalize first letter from a paragraf/new line
sed -i 's/[\.!?]\s*./\U&\E/g' $@ #capitalize all letters that follow a dot, ? or !
Para o seu caso especial, as coisas ficaram um pouco:
#!/bin/bash
#check if a file is given as argument
if [ $# -ne 1 ];then
echo "Usage: 'basename $0' FILE NAME"
exit 1
fi
sed -i '1s/^\s*./\U&\E/g' $@ #capitalize first letter from the file
sed -i 's/\.\s*./\U&\E/g' $@ #capitalize all letters that follow a dot
#check if the a line ends in dot, ? or ! character and
#if yes capitalize first letter from the next line
next_line=0
cat $@ | while read line ;do
next_line=$[$next_line+1]
lastchr=${line#${line%?}}
if [ "$lastchr" = "." ] || [ "$lastchr" = "!" ] || [ "$lastchr" = "?" ]; then
sed -i "$[$next_line+1]s/^\s*./\U&\E/g" $@
fi
done
Além disso, você pode consultar este tutorial: Unix - Expressões regulares com o SED para ver como para trabalhar nessas situações.