Linux 判断并修复文件没有结束行(noeol)

有些配置文件或者脚本有时候会出现最后一行没有结束符的情况,如下,

[root@CentOS-7-2 /home]# cat noeol.txt 
/var/log/my.log {
        size 10M
        missingok
        copytruncate
}[root@CentOS-7-2 /home]# 

最后一行和提示符处在同一行。这样会导致配置文件格式错误,如果是脚本,则无法执行最后一条语句,因此肯定是有问题的。

目前尚无专门用于处理该问题的命令,可以使用diff命令比较后出现的关键字No newline来辅助判断。先看下使用diff命令比较后的差异内容,

[root@CentOS-7-2 /home]# diff /dev/null noeol.txt 
0a1,5
> /var/log/my.log {
>         size 10M
>         missingok
>         copytruncate
> }
\ No newline at end of file
[root@CentOS-7-2 /home]# 

可见,对于没有结束行的文件会有特别提示,因此可以使用以下命令鉴别,

if diff /dev/null ${file} | tail -1 | grep '^\\ No newline' > /dev/null;then 
    echo "no eol"
fi

至于修复的话,直接往文件里写入空字符即可,如下,

if diff /dev/null ${file} | tail -1 | grep '^\\ No newline' > /dev/null;then 
    echo >> ${file}
fi

echo会自动在文件最后追加结束符。

猜你喜欢

转载自blog.csdn.net/u010039418/article/details/81077781
今日推荐