【发布时间】:2013-06-19 15:06:04
【问题描述】:
我在 Windows 中使用记事本创建了一个文件:
26453215432460
23543265235421
38654365876325
12354152435243
我有一个脚本可以读取每一行,并在其他文件中为每一行创建如下命令,并且不会考虑空行:
CRE:EQU,264532154324600,432460,1;
现在如果我在数字12354152435243的最后一行之后按回车键保存我的输入文件,那么输出文件包含上面对应于所有数字的命令(包括最后一个12354152435243:
CRE:EQU,264532154324600,432460,1;
CRE:EQU,235432652354210,235421,1;
CRE:EQU,386543658763250,876325,1;
CRE:EQU,123541524352430,435243,1;
但是如果我保存文件,在输入最后一个数字后没有按回车,即在此12354152435243 之后,那么在脚本执行后,我看不到输出文件有最后一个数字的命令:
CRE:EQU,264532154324600,432460,1;
CRE:EQU,235432652354210,235421,1;
CRE:EQU,386543658763250,876325,1;
谁能解释代码中的错误:
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};" >> /apps/ins/list.out
done < "${FILE_NAME}"
请帮忙
【问题讨论】:
-
我想知道这是否与 Windows 与 *nix 行尾有关。 (可能不是,但你永远不知道...)尝试在 HexFiend 等十六进制编辑器中打开文件,然后查看最后一个字符。
-
是的,我想的是回车或
\n字符 -
好吧,你也许可以将行尾更改为 Unix 行尾而不是 Windows 行尾。
-
在获取输入文件后,我已经在脚本中添加了
dos2unix。你的意思是,这不会解决它? -
记事本有个愚蠢的想法,即最后一行不需要 any 类型的终结符。如果您不确定以换行符手动结束文件,它所保存的内容在技术上不是有效的文本文件,因为文本文件由带有终止符的行组成。