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

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

我厌倦了源文件中无用的空格,我什至配置了 vim 来显示它们。

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

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

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

答案1

如果无用的空格是指行尾的尾随空格,那么这将在 GNU 系统上工作:

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

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

答案2

这是一个反复出现的问题!

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

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

答案3

尝试Ex方式:

ex +'bufdo!%s/\s\+$//e' -scxa *.*

删除当前文件夹中所有文件的尾随空格。对于递归(bash4/zsh),您可以使用一个新的通配选项( **/*.*)。

注意:该:bufdo命令不是POSIX

答案4

为了避免接触已经正常的文件,使用 GNU 工具:

grep -rlZ --binary-files=without-match --include='*.c' '\s$' . |
  xargs -r0 sed -i 's/\s+$//'

相关内容