[英]shell script taking last empty line of a file also
我有一个脚本:
#! /usr/bin/ksh
TODAY=$(date +%Y%m%d)
list=$1
FILE_NAME="IMEI.txt"
OUTFILE="${list}_list.out"
##########################################
if [ -z ${list} ]
then
echo "Use the syntax ./add_imei.sh <list number>"
exit 0
fi
while read LINE
do
IMEI=`echo $LINE |
sed 's/ //g' | sed -e 's/[^ -~]//g'`
END_SERIAL=`echo $IMEI |
cut -c9- | sed 's/ //g' |
sed -e 's/[^ -~]//g'`
echo \
"CRE:EQU,${IMEI}0,${END_SERIAL},${list},,${TODAY};" \
>> ${OUTFILE}i
done < "${FILE_NAME}"
该脚本将从文件IMEI.txt
每一行中获取14位数字,并构建如下命令:
CRE:EQU,777777777777770,777777,0,,20130611;
并将其保存在单独的输出文件中。 很简单的工作。 一切正常,但是当我查看输出文件时,会看到以下内容:
CRE:EQU,444444444444440,444444,0,,20130611;
CRE:EQU,555555555555550,555555,0,,20130611;
CRE:EQU,666666666666660,666666,0,,20130611;
CRE:EQU,777777777777770,777777,0,,20130611;
CRE:EQU,0,,0,,20130611; <-- *)
*)对于输入行的最后一个空行(当我在保存输入文件时按下了最后一个回车键),它也在输出文件中构建了我不想要的命令。 有任何快速,简短而明智的方法来解决此问题吗?
while read LINE
do
[ -z "$LINE" ] && continue
IMEI=$(echo $LINE | sed 's/ //g' | sed -e 's/[^ -~]//g')
END_SERIAL=$(echo $IMEI | cut -c9- | sed 's/ //g' | sed -e 's/[^ -~]//g')
echo "CRE:EQU,${IMEI}0,${END_SERIAL},${list},,${TODAY};" >> ${OUTFILE}i
done < "${FILE_NAME}"
如果该行为空,请继续循环的下一个迭代。
或sed
在将文件送入循环之前删除空白行(仅包含空白和制表符):
sed '/^[ ]*$/d' "$FILE_NAME" |
while read LINE
do
IMEI=$(echo $LINE | sed 's/ //g' | sed -e 's/[^ -~]//g')
END_SERIAL=$(echo $IMEI | cut -c9- | sed 's/ //g' | sed -e 's/[^ -~]//g')
echo "CRE:EQU,${IMEI}0,${END_SERIAL},${list},,${TODAY};" >> ${OUTFILE}i
done
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.