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.
答案 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
.