Solaris 10: 複数のファイルから末尾の空白行を削除する

Solaris 10: 複数のファイルから末尾の空白行を削除する

私はSolaris 10を使用しています。一度に複数のファイルから空白行を削除する最も簡単な方法は何ですか?

答え1

高速で小さなスクリプトが機能するはずです。私は持っていますこれnixCraftで試してみましたが、うまくいきます。

#!/bin/sh
files="/home/me/data/*.txt"
for i in $files
do
  sed '/^$/d' $i > $i.out
  mv  $i.out $i
done

$files必要に応じて交換してください。

答え2

空白行をすべて削除するのが最も簡単です。

sed -i.bak '/^$/d' $FILES

拡張子を持つバックアップが作成されます.bak。バックアップが必要ない場合は削除してください。

空白のある行も削除するには(スペースのみを含む)、次を追加します\W*

sed -i.bak '/^\W*$/d' $FILES

これは--posixgnu sedのオプションと連携します(gnu拡張はオフになっているため、Solarisでは機能する必要があると思います)。

sed -i.bak '/^[ \t]*$/d' $FILES

必要に応じて空白文字を追加します。

答え3

次の空行のみを削除するさまざまな方法:

printf %s\\n "$(cat file)"|sponge file
tac file|awk /./,0|tac|sponge file
perl -0777 -pi -e 's/\n*$/\n/' file
gsed -i ':1;/^\n*$/{$d;N;b1}' file
bsdsed -i '' -e :1 -e '/^\n*$/{$d;N;b1' -e '}' file

echo "$(printf 'a\n\n')b"コマンド置換は、printsなどのすべての末尾の改行を削除しますab

spongemoreutilsから。

に交換されるtactail -r

perl -0777$_フル入力に設定し、各行の後に印刷します-p$_望むよりman perlrun

:ラベルを設定し、bラベルに分岐し、$d最後の行のパターンスペースを削除し、パターンスペースNに次の行を追加します。

GNUはandの後にセミコロンをsed許可しますが、POSIXとBSDは許可しません。 GNUでは機能しますが、BSDでは機能しません。BSDでは機能しますが、GNUでは機能しません。:bsed-isedsed-i ''sedsed

答え4

次の1行コマンドを使用して、複数のファイルから空白行を削除できます。

find directoryname -name "filename" -print | xargs sed -i '/^$/d'

たとえば、現在のディレクトリとサブディレクトリにあるすべてのファイルから空白行を削除するには、次のコマンドを使用します。

find . -name "*.*" -print | xargs sed -i '/^$/d'

関連情報