如何在给定文件(多个)中删除行尾的空白?


9

我已经厌倦了源文件中无用的空间,甚至已经配置了vim来显示它们。

问题是我经常(如果不是总是)不得不与我的同伴开发人员一起处理无用的空间。

我只想扫描源文件(使用正则表达式)并从所有给定文件中删除空格。

我已经在网上搜索(“删除空格删除”等),但找不到有用的东西。


2
删除空格?没有您要删除的内容的示例,我看不到任何人可以如何帮助您。(我想tr -d ' ' < file.foo这不正是您要的内容。)
Mat

您如何以编程方式分辨出无用空格和有用空格之间的区别?顺便说一句:您可以使用for循环和mv以及sed和折叠空格;
2013年

当您将文件保存在vim中时,您也可以删除尾部空格(省去编辑后重新运行此命令的麻烦):unix.stackexchange.com/questions/75430/…–
Lucas

Answers:


8

如果用无用的空格来表示在行尾尾随空格,那么这将在GNU系统上起作用:

find -name '*.c' -print0 | xargs -r0 sed -e 's/[[:blank:]]\+$//' -i

(替换为*.c与您的源文件匹配的任何内容)


我已更改标题,非常感谢您的回答。有人投票否决了,因为也许他以为太简单了,没人问这个问题;^)。再次感谢你。
奥利维尔·庞斯

1

这是一个经常出现的问题!

perl -i -pe 's/\s+\n/\n/'  ./*.c

(这也会删除' \r\n')

我通常使用稍微复杂一些的版本“ nrs”(没有多余的空格):

#!/usr/bin/perl -pi
s/\h*(\r\n|\n|\r)/\n/g;                 ## normalize \n (DOS, MAC)
s/^(\xFF\xFE|\xFE\xFF|\xEF\xBB\xBF)//;  ## remove BOM !

安装它:(chmod 755 nrs; cp nrs ~/bin; 或类似的)

并使用: nrs ./*.c

不要在二进制文件中使用它!



0

为了避免使用GNU工具触摸已经可以的文件,请执行以下操作:

grep -rlZ --binary-files=without-match --include='*.c' '\s$' . |
  xargs -r0 sed -i 's/\s+$//'
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.