Replace spaces at the end of line in files

时间:2015-12-14 18:09:33

标签: sed

I try to remove the space at the end of line in all Java files. I found such a command from internet but it doesn't work on MacOSX.

find ./ -type f  -name '*.java' -exec sed -i '' 's/\s+/\n/g' {} \;

I still not figure out why it doesn't work.

2 个答案:

答案 0 :(得分:3)

Mac OS X不使用GNU sed(它使用BSD sed),因此它不会将\s识别为'空格'(或+为'一个或多个')默认情况下。但是,BSD sed确实支持-i选项(与另一个答案相反),但它需要一个备份后缀(如果您勇敢并且确信您的脚本是正确的,则可以是空字符串)

使用:

find . -type f -name '*.java' -exec sed -i '' 's/[[:space:]]\{1,\}$//' {} +

或者使用扩展的正则表达式(在-E中使用sed;你使用-r和GNU sed,虽然它似乎直觉你的正则表达式是什么样的正在使用):

find . -type f -name '*.java' -exec sed -i '' -E 's/[[:space:]]+$//' {} +

sed的Mac OS X手册页引导您man 7 re_format启用-E启用的“扩展正则表达式”。请仔细阅读; 'extended'与'enhanced'不同!

在一行的末尾查找一个或多个空格字符;什么都不用。为方便的时间(尽管是{}命令中的+find执行多个文件;使用;代替+强制执行sed {每个文件{1}}。

[[:space:]]表示法是POSIX标准,涵盖空格和制表符以及其他空白区域。您可以使用[[:blank:]]来处理空格和制表符。如果您确定只有尾随空白(并且没有尾随制表符),则可以使用简单的空白('s/ +$//')替换该难以处理但精确的术语。 (见POSIX Regular expressions。)

在确保脚本正常工作之前,我不会使用null备份扩展。你可能会对你的文件造成严重破坏。

答案 1 :(得分:0)

sed -i is not supported on Mac OS. If you want to use sed -i, I recommend installing GNU coreutils via a package manager like homebrew.

brew install coreutils

For more information regarding coreutils, see brew info coreutils.