与えられたファイルの行の末尾から末尾のスペースを削除する方法は?

与えられたファイルの行の末尾から末尾のスペースを削除する方法は?

ソースファイルの役に立たないスペースが疲れてしまったので、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+$//'

関連情報