複数のファイルの末尾の空白を削除するツール/ UNIXシングルライナーはありますかin-place。
例えば。 findと組み合わせて使用できるもの。
あなたが欲しい
sed --in-place 's/[[:space:]]\+$//' file
これにより、all POSIX標準定義の空白文字が削除され、垂直タブやフォームフィードが含まれます。また、ゼロ以上のマッチャー(*
)を使用する他の回答とは異なり、末尾の空白が実際に存在する場合にのみ置換を行います。
--in-place
は、単に-i
の長い形式です。スクリプトで長い形式を使用することを好みます。これは、フラグが実際に行うことをよりわかりやすくする傾向があるためです。
次のようにfind
と簡単に統合できます。
find . -type f -name '*.txt' -exec sed --in-place 's/[[:space:]]\+$//' {} \+
コメントで指摘したように、gnuツールをインストールしていない場合、上記は機能しません。その場合は、次を使用できます。
find . -iname '*.txt' -type f -exec sed -i '' 's/[[:space:]]\{1,\}$//' {} \+
すべてがGNU sedを必要とする他のソリューションとは異なり、これはPOSIX標準コマンドを実装するすべてのUnixシステムで動作するはずです。
find . -type f -name "*.txt" -exec sh -c 'for i;do sed 's/[[:space:]]*$//' "$i">/tmp/.$$ && mv /tmp/.$$ "$i";done' arg0 {} +
編集:このわずかに変更されたバージョンは、ファイルのアクセス許可を保持します。
find . -type f -name "*.txt" -exec sh -c 'for i;do sed 's/[[:space:]]*$//' "$i">/tmp/.$$ && cat /tmp/.$$ > "$i";done' arg0 {} +
私は this を使用して空白を修正しました:
while IFS= read -r -d '' -u 9
do
if [[ "$(file -bs --mime-type -- "$REPLY")" = text/* ]]
then
sed -i -e 's/[ \t]\+\(\r\?\)$/\1/;$a\' -- "$REPLY"
else
echo "Skipping $REPLY" >&2
fi
done 9< <(find . \( -type d -regex '^.*/\.\(git\|svn\|hg\)$' -Prune -false \) -o -type f -print0)
特徴:
[:space:]
)、したがって、Windows/DOSスタイルのファイルで正常に動作します。file
がテキストファイルであると考えるファイルのみを変更します。Sed gurus(自分自身を含む)ではない人のために、JavaScriptの正規表現を使用してファイル内のテキストを置換し、その場所で置換を行う小さなスクリプトを作成しました。
末尾の空白を削除するには、次のように使用できます。
$ node sed.js "/^[\t ]*$/gm" "" file
楽しい
ex
Exエディター (Vimの一部)を使用してみてください:
$ ex +'bufdo!%s/\s\+$//e' -cxa *.*
注:再帰(bash4およびzsh)の場合、 新しいグロビングオプション (**/*.*
)を使用できます。 shopt -s globstar
で有効にします。
Perl
find . -type f -name "*.Java" -exec Perl -p -i -e "s/[ \t]$//g" {} \;
Spring Framework Code Style に従って。
sed
sed
を使用するには、次を確認してください。 sedで末尾の空白を削除する方法?
何らかの理由で、sedコマンドとPerlコマンドが機能しませんでした。これは:
find ./ -type f | rename 's/ +$//g'
同様に読むのが最も簡単なもののように感じます