Quem programa com Python e tenta seguir ao máximo o PEP8, pode se deparar vez ou outra com aquelas linhas em branco no fim do arquivo, principalmente quando agente pega código de programadores que não estão acostumados com Python ou que simplesmente não ligam para padronização.
find . -name *.py -type f -exec sed -i 's/ \+$//g' {} \;
Vamos "esquartejar" o comando e estudar cada parte:
- find . - O ponto diz ao find para pesquisa no diretório atual. Altere conforme sua necessidade.
- -name *.py - Diz ao find que só queremos arquivos com a extensão .py - essa nem precisava explicar, tá na cara né;
- -type f - Diz ao find que só queremos que ele procure arquivos. Mas na linha anterior você já não disse que era para encontrar somente a extensão .py? Pra que dizer que é só arquivo agora? Bem, para mostrar que você tem várias alternativas de uso;)
- -exec - Diz ao find que queremos executar um comando para cada arquivo encontrado, neste caso será o sed.
- sed -i - O parâmetro -i diz ao sed para fazer um edit in place. Caso você seja um cara muito cismado, ou não esteja usando controle de versão(que é uma péssima idéia), você pode passar para -i um sufixo, assim ele criará uma cópia do arquivo original colocando o sufixo informado.
- 's/ \+$//g' - Precisamos "esquartejar" mais um pouco:
- s/ - Diz ao sed que estamos fazendo uma operação de find and replace, logo após essa barra informamos o que estamos procurando;
- " \+$" Vamos "esquartejar" mais um pouco?:
- " "- Coloquei as "aspas" apenas para que você consiga ver que existe um espaço, que é o que estamos procurando;
- \+ O + em uma regex diz que o padrão anterior, o espaço, tem que aparecer no mínimo uma vez. E a barra invertida tem que estar lá ;);
- $ - O cifrão indica que estamos procurando este padrão, um ou vários espaços em branco, apenas no fim da linha.
- / - Indica que aqui acaba o padrão que estamos procurando e começa o conteúdo que irá substituir as ocorrências;
- / - Não se confunda, veja que antes do g que estão no fim existem duas barras invertidas, essa é a que está antes do g. Ela indica o fim do conteúdo que irá substituir o padrão encontrado. Neste caso como temos // vamos substituir os espaços em branco por NADA.
- g - Aplique o find and replace a TODAS as ocorrências e não somente a primeira;
- {} \; - Bem, esse padrão precisar estar no final senão o exec do find simplesmente não funciona;
É isso ai pessoal, espero que seja útil para alguém.
Nenhum comentário:
Postar um comentário