Eu tenho um arquivo file_list.txt que contém uma lista de nomes de arquivos a serem processados. E para todos os arquivos presentes no file_list.txt, tenho que remover os espaços em branco e os caracteres extras de nova linha. Como posso conseguir isso. Usar um loop while será melhor ou um loop for?
Responder1
Se for sobre editar o conteúdo do file_list.txt
,você usaria uma ferramenta de edição de texto, não um shell loop, como:
sed 's/[[:space:]]*$//; # remove trailing whitespace
/./!d; # remove empty lines' < file_list.txt > new_file_list.txt
Ou para edição no local:
perl -nli.back -e 's/\s+$//;print if /./' file_list.txt
(remova .back
se não precisar de cópias de segurança do original).
Se file_list.txt
contém uma lista de arquivos e são esses arquivos cujo conteúdo você deseja editar, então, novamente, um loop não é ideal, a menos que você queira executar um comando de edição por arquivo.
Se o conteúdo de file_list.txt
for compatível com xargs
o formato de entrada, é onde os nomes dos arquivos são separados por espaços em branco (incluindo nova linha) e aspas duplas, aspas simples ou barra invertida podem escapar dos espaços em branco e entre si (permitindo qualquer caractere), então você pode simplesmente fazer:
xargs < file_list.txt perl -nli.back -e 's/\s+$//;print if /./' --