
現在実行中のプログラムがありますが、正しい機能には適していないいくつかの標準入力を無視するように変更する必要があります。
今プログラムを実行してください: printf "1\n3\n5\n" Program
プログラムは現在の整数ではない入力(浮動小数点数など)を無視しますが、また、同じ行の「4 10」や「5 text」などの項目を無視する必要があります。
#! /bin/sh
sum=0;
cnt=0
while read line
do
case "$line" in
*[.]* ) #------I think here is where the regex needs to be edited
printf "\n0"
continue
;;
[0-9]* )
sum=`expr "$sum" + "$line"`
cnt=`expr "$cnt" + 1`
printf "\n%s" `expr $sum / $cnt`
;;
esac
done
私は私が指摘した行の正規表現を変更してゼロを印刷し、上記の2つの望ましくない入力タイプを使い続けるだけでよいと確信していますが、問題があります。
ありがとうございます!
答え1
あなたはできます...
while read line
do line=${line%%[!0-9]*}
[ -n "$line" ] || continue
: work w/ digits at line's head
done
または、より速い方法で以下を実行できます。
tr -cs 0-9\\n \ |
while IFS=\ read num na
do ${num:+":"} continue
: work w/ first seq of digits on line
done
または無視したい場合完全スペース、タブ、数字、またはスペースで区切られた2つの数字以外の項目を含む行...
b=${IFS%?}
grep "^[$b]*[0-9]\{1,\}[$b]*$" |
while read num; do : stuff with "$num"; done
次のことができますcase
。
while read num
do case ${num:--} in
*[!0-9]*) continue;;esac
: something w/ $num
done