Tengo un archivo file_list.txt que contiene una lista de nombres de archivos para procesar. Y para todos los archivos presentes en file_list.txt, tengo que eliminar los espacios en blanco finales y los caracteres de nueva línea adicionales. Cómo puedo conseguir esto. ¿Será mejor usar un bucle while o un bucle for?
Respuesta1
Si se trata de editar el contenido del file_list.txt
,usarías una herramienta de edición de texto, no un bucle de shell, como:
sed 's/[[:space:]]*$//; # remove trailing whitespace
/./!d; # remove empty lines' < file_list.txt > new_file_list.txt
O para edición in situ:
perl -nli.back -e 's/\s+$//;print if /./' file_list.txt
(elimine .back
si no necesita copias de seguridad del original).
Si file_list.txt
contiene una lista de archivos y son esos archivos cuyo contenido desea editar, entonces nuevamente un bucle no es ideal a menos que desee ejecutar un comando de edición por archivo.
Si el contenido de file_list.txt
es compatible con xargs
el formato de entrada, es decir, donde los nombres de los archivos están separados por espacios en blanco (incluida la nueva línea) y las comillas dobles, las comillas simples o la barra invertida pueden escapar de los espacios en blanco y entre sí (permitiendo cualquier carácter), entonces puede hacer lo siguiente:
xargs < file_list.txt perl -nli.back -e 's/\s+$//;print if /./' --