TABSTOP=8
MINTABSTOP=1
INFILE="-"
OPTIONS="s:"
LSPACES={}
function replace_tab(){
local LLINE="$1"
local LTMP1=""
local LTMP2=""
local LTMP3=""
local LNLIN=""
local LLENGTH=${#LLINE}
local Llen1=0
IFS=""
while [ 0 -lt $LLENGTH ]; do
Llen1=0
LTMP3="$LLINE"
LTMP2="${LTMP3#}"
LTMP3="$LLINE"
LTMP1="${LTMP3%${LTMP2}}"
LLINE="$LTMP2"
while [ "\t" != "${LTMP1}" ]; do
LNLIN="$LNLIN$LTMP1"
let "Llen1++"
if [ 0 -eq ${#LTMP2} ]; then
break
fi
LTMP3="$LLINE"
LTMP2="${LTMP3#?}"
LTMP3="$LLINE"
LTMP1="${LTMP3%${LTMP2}}"
LLINE="$LTMP2"
done
if [ " " = "${LTMP1}" ]; then
i=$(( $TABSTOP - ( $Llen1 % $TABSTOP ) ))
LNLIN="$LNLIN${LSPACES[$I]}"
fi
LLENGTH=${#LLINE}
done
echo "$LNLIN"
}
while getopts $OPTIONS opt $@ ; do
case "$opt" in
s)
if [ $MINSTASTOP -le $OPTARG ]; then
TABSTOP=$OPTARG
else
echo "タブストップの文字数を指定してください" 1>&2
exit -1
fi
;;
*) exit -1 ;;
esac
done
shift $(( $OPTIND -1 ))
if [ $# -eq 0 ]; then
INFILE=""
elif [ $# -eq 1 ]; then
if [ "\-" = "$1" ]; then
INFILE=""
else
INFILE="$1"
if [ ! "(" -f $INFILE ")" ]; then
echo "ファイルが読めません" 1>&2
exit -1
fi
fi
else
echo "オプションが多いです" 1>&2
exit -1
fi
LSPACES[1]=" "
for (( i = 2; i <= $TABSTOP; i++ )) {
LSPACES[$i]="${LSPACES[$i-1]} "
}
if [ "" = "$INFILE" ]; then
echo 1
while read line; do
replace_tab "$line"
done
else
while read line; do
replace_tab "$line"
done < "$INFILE"
fi