私は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
これは--posix
gnu 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
。
sponge
moreutilsから。
に交換されるtac
。tail -r
perl -0777
$_
フル入力に設定し、各行の後に印刷します-p
。$_
望むよりman perlrun
。
:
ラベルを設定し、b
ラベルに分岐し、$d
最後の行のパターンスペースを削除し、パターンスペースN
に次の行を追加します。
GNUはandの後にセミコロンをsed
許可しますが、POSIXとBSDは許可しません。 GNUでは機能しますが、BSDでは機能しません。BSDでは機能しますが、GNUでは機能しません。:
b
sed
-i
sed
sed
-i ''
sed
sed
答え4
次の1行コマンドを使用して、複数のファイルから空白行を削除できます。
find directoryname -name "filename" -print | xargs sed -i '/^$/d'
たとえば、現在のディレクトリとサブディレクトリにあるすべてのファイルから空白行を削除するには、次のコマンドを使用します。
find . -name "*.*" -print | xargs sed -i '/^$/d'