현재 실행 중인 프로그램이 있지만 올바른 기능에 적합하지 않은 일부 표준 입력을 무시하도록 수정해야 합니다.
이제 프로그램을 실행하십시오: 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
나는 내가 지적한 줄의 정규식을 변경하여 0을 인쇄하고 위에서 설명한 원하지 않는 두 입력 유형을 계속 사용하기만 하면 된다고 확신하지만 문제가 있습니다.
감사합니다!
답변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
아니면 무시하고 싶다면완전히공백, 탭, 숫자 또는 공백으로 구분된 두 개의 숫자 이외의 항목이 포함된 줄...
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