Solaris 10: Remova linhas em branco à direita de vários arquivos

1

Estou trabalhando no Solaris 10. Qual é a maneira mais fácil de remover linhas em branco de vários arquivos de uma só vez?

    
por rahmu 13.12.2011 / 17:03

4 respostas

4

Um pequeno script rápido deve funcionar. Eu tenho isso da nixCraft um tempo e isso funciona muito bem.

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

Substitua $files de acordo com suas necessidades.

    
por 13.12.2011 / 17:22
2

Será mais fácil remover todas as linhas em branco:

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

Isso criará um backup com a extensão .bak , tire isso se você não quiser um backup.

Se você quiser remover linhas com espaço em branco (e apenas espaço em branco), adicione \W* :

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

E isso funciona com a opção --posix no gnu sed (desativa extensões do gnu, então acho que isso deve funcionar no solaris):

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

Adicione mais caracteres de espaços em branco, se necessário.

    
por 13.12.2011 / 17:26
1

Diferentes formas de remover apenas linhas vazias à direita:

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

As substituições de comandos removem todos os feeds de linha à direita, portanto, por exemplo, echo "$(printf 'a\n\n')b" imprime ab .

sponge é de moreutils.

Substitua tac por tail -r no BSD.

perl -0777 define $_ para toda a entrada e -p imprime $_ após cada linha. Veja man perlrun .

: define um rótulo, b ramifica para um rótulo, $d exclui o espaço padrão na última linha e N acrescenta a próxima linha ao espaço padrão.

GNU sed permite ponto e vírgula após : e b , mas POSIX e BSD sed não. -i funciona com GNU sed mas não com BSD sed e -i '' funciona com BSD sed mas não com GNU sed .

    
por 15.07.2014 / 15:25
0

Você pode usar o seguinte comando de linha única para remover linhas em branco em vários arquivos

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

Se, por exemplo, você quiser remover as linhas em branco de todos os arquivos encontrados no diretório atual e em seus subdiretórios, use o seguinte comando:

find . -name "*.*" -print | xargs sed -i '/^$/d'
    
por 26.09.2013 / 08:40

Tags