我嘗試刪除所有Java文件中行尾的空格。我從互聯網上找到了這樣一個命令,但它在MacOSX上不起作用。替換文件中行尾的空格
find ./ -type f -name '*.java' -exec sed -i '' 's/\s+/\n/g' {} \;
我還沒弄清楚爲什麼它不起作用。
我嘗試刪除所有Java文件中行尾的空格。我從互聯網上找到了這樣一個命令,但它在MacOSX上不起作用。替換文件中行尾的空格
find ./ -type f -name '*.java' -exec sed -i '' 's/\s+/\n/g' {} \;
我還沒弄清楚爲什麼它不起作用。
的Mac OS X不使用GNU sed
(它使用BSD sed
),所以默認情況下不承認\s
爲「空間」(或+
爲「一個或多個」)。但是,BSD sed
確實支持-i
選項(與其他答案相反),但它需要一個備份後綴(如果您勇敢並且確信您的腳本正確,可以爲空字符串)。
用途:
find . -type f -name '*.java' -exec sed -i '' 's/[[:space:]]\{1,\}$//' {} +
或(在BSD sed
與-E
,你會使用-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
)。
[[:space:]]
表示法是POSIX標準,涵蓋了空白和製表符以及其他空白區域。您可以使用[[:blank:]]
來處理空白和製表符。如果您確定只有尾隨空白(並且沒有尾隨標籤),則可以用簡單的空白替換那個笨重但精確的術語('s/ +$//'
)。 (請參閱POSIX Regular expressions。)
在確保腳本正常工作之前,我不會使用空備份擴展。你可能會對你的文件造成嚴重破壞。
sed -i
在Mac OS上不受支持。如果你想使用sed -i
,我建議通過像homebrew這樣的軟件包管理器來安裝GNU coreutils。
brew install coreutils
有關的coreutils的更多信息,請參閱brew info coreutils
。
'sed -i .bak'由Mac OS X(BSD)'sed'支持。不支持的是不提供後綴;你必須使用'sed -i'''來實現它。 –
是否說出任何錯誤? – sat
@sat沒有任何錯誤,但沒有功能。我想sed正則表達式字符串應該逃脫,但不是如何做到這一點。 – lucky1928