尽管它不能直接回答问题,但这是我编写的一个相关脚本,用于检测未以换行符结尾的文件。非常快。

find.-type f|# sort | # sort file names if you like/usr/bin/perl-lne'

open FH, "

$pos = sysseek FH, 0, 2; # seek to EOF

if (!defined $pos) { print " error: $_"; next }

if ($pos == 0) { print " empty: $_"; next }

$pos = sysseek FH, -1, 1; # seek to last char

if (!defined $pos) { print " error: $_"; next }

$cnt = sysread FH, $c, 1;

if (!$cnt) { print " error: $_"; next }

if ($c eq "\n") { print " EOL: $_"; next }

else { print "no EOL: $_"; next }

'

perl脚本从stdin读取(可选排序的)文件名列表,并为每个文件读取最后一个字节,以确定文件是否以换行符结尾。它非常快,因为它避免了读取每个文件的全部内容。对于每个读取的文件,它输出一行,如果发生某种错误,则以“ error:”为前缀,如果文件为空(不以换行符结尾!),则以“ empty:”开头;“ EOL:”(“行”),如果文件以换行符结尾,则为“ no EOL:”(如果文件不以换行符结尾)。

注意:该脚本不处理包含换行符的文件名。如果您使用的是GNU或BSD系统,则可以通过添加-print0来查找,-z进行排序以及-0到perl来处理所有可能的文件名,如下所示:

find.-type f-print0|sort-z|/usr/bin/perl-ln0e'

open FH, "

$pos = sysseek FH, 0, 2; # seek to EOF

if (!defined $pos) { print " error: $_"; next }

if ($pos == 0) { print " empty: $_"; next }

$pos = sysseek FH, -1, 1; # seek to last char

if (!defined $pos) { print " error: $_"; next }

$cnt = sysread FH, $c, 1;

if (!$cnt) { print " error: $_"; next }

if ($c eq "\n") { print " EOL: $_"; next }

else { print "no EOL: $_"; next }

'

当然,您仍然必须想出一种在输出中使用换行符对文件名进行编码的方法(留给读者练习)。

如果需要,可以对输出进行过滤,以将换行符添加到那些没有换行符的文件中,最简单的做法是

echo>>"$filename"

缺少最后一个换行符可能会导致脚本中的错误,因为在读取此类文件时,某些版本的Shell和其他实用程序将无法正确处理缺少的最后一个换行符。

以我的经验,缺少最后一个换行符是由使用各种Windows实用程序来编辑文件引起的。我从未见过vim在编辑文件时会导致缺少最后的换行符,尽管它会报告此类文件。

最后,还有一些更短(但更慢)的脚本,它们可以循环其文件名输入以打印不以换行符结尾的那些文件,例如:

/usr/bin/perl-ne'print "$ARGV\n" if /.\z/'--FILE1 FILE2...

linux如何在文件末尾添加空行,如何在文件末尾添加换行符?相关推荐

  1. linux删除最后一个换行符,如果它是文件中的最后一个字符,如何删除换行符?...

    perl -pe 'chomp if eof' filename >filename2 或者,编辑文件到位: perl -pi -e 'chomp if eof' filename [编者注: ...

  2. 文件读写r,rb,w,wb区别(对于换行符的处理)

    windows: 当用'w'方式写文件时,将\n变成两个字符\r\n写入文件. 当用'r'方式读文件时,将文件里的\r\n读入为\n. 使用'rb','wb'方式读写则不会发生上述转换 Linux: ...

  3. linux中删除文件的空行,Linux 删除文件中的空行

    Linux 删除文件中的空行 相信很多朋友在日常的开发过程中经常要处理一些文本, 其中很重要的一部分就是要删除文本中的空行, 例如下面的文本 (我现在的开发环境是 HP-UX , 在 Linux 环境 ...

  4. linux shell sed 添加空行

    一.每行前后添加空行 1.每行后面添加一行空行: sed G tmp 每行前面添加一行空行: sed '{x;p;x;}' tmp 2.每行后面添加两行空行: sed 'G;G' tmp 每行前面添加 ...

  5. vim移除自动添加的换行符

    文章作者:Tyan 博客:noahsnail.com  |  CSDN  |  简书 1. 引言 在使用vim编辑文件时,默认情况下,vim会在文件末尾自动添加换行符(endofline).如果需要移 ...

  6. Python 三种读文件方法read(), readline(), readlines()及去掉换行符\n

    Python 三种读文件方法read(), readline(), readlines()及去掉换行符\n 首先, 让我们看下数据demo.txt, 就两行数据. 35durant teamGSW 1 ...

  7. python只读打开文件_关于python:只读文件的第一行?

    如何使用python只得到文件的第一行作为字符串? 如果您已经阅读了文件("在阅读了文件之后"),那么您已经阅读了第一行!(假设至少有一行.) 请注意,现在所说的问题与原来的含义不 ...

  8. windows下回车换行符在Linux下显示^M问题

    背景: win下的PHP文件打包,在Linux下解压后,在git status 时,显示发生修改,但并没有修改,查看文件会发现这种字符^M其实就是因为换行符的原因 ,Windows换行符和Linux换 ...

  9. Git下载代码到Windows再拷贝到Linux下编译时要关闭换行符自动转换

    Git下载代码到Windows再拷贝到Linux下编译时要关闭换行符自动转换 一.各操作系统下文件换行符 二.TortoiseGit下载Github代码关闭文件换行符 三.示例说明 1.开启换行符自动 ...

最新文章

  1. JSONOBject的fluentPut(key,value)方法:可链式设置元素
  2. jar包冲突与inode
  3. golang超时控制
  4. iOS开发之NSString和UTF-8间的转换
  5. (12.05)Java小知识!
  6. 课程设计方案模板MySQL_MYSQL数据库课程设计.doc
  7. OpenGL ES 之 2D 纹理介绍和使用
  8. Python监控股价并通过微信提醒
  9. 《精进》(采铜)——读书笔记
  10. 域名解析地址如何查看?为什么要做域名解析?
  11. 【Matlab】如何规范地编写一个MATLAB函数文件
  12. 如何解决chrome flash 过期
  13. 如何让绘画灵气十足-张聪-专题视频课程
  14. 已知坐标用matlab画图,已知45个点X Y Z的坐标值已知,如何用matlab画出网格图,每......
  15. 深圳周边户外活动经典线路----转载
  16. IBM Power6、7配件FC号描述翻译(unix360.part06)
  17. 行车电脑蓝牙ELM327 OBD使用记
  18. 超级电容的PWM电流镜方案的一些注意点
  19. 微信小程序用户登录功能无法使用
  20. 深入usb网络共享(一) usb共享的开启流程(and5.1)

热门文章

  1. STM32超级简便的按键代码 只需三行 可实现短按+长按
  2. EtherCAT 寻址模式详解
  3. DebugView无法显示调试信息问题
  4. 定位input的光标,设置光标的位置
  5. 【Linux】alias及设置
  6. c语言CFile的使用方法,mfc文件操作CFile类之创建文件的方法
  7. Linux上启动mysql不成功
  8. win2012服务器系统要求,Windows server2012公开报价多少?安装系统有什么要求?
  9. linux jfs文件名长度,Linux环境下使用JFS文件系统
  10. IDEA如何设置热启动