Estoy usando sed
un bucle while para eliminar los espacios en blanco finales de un archivo que contiene una lista de archivos. Los espacios en blanco se están eliminando. Pero estoy recibiendo el mensaje sed:no input files
.
El siguiente es el bucle while que estoy usando:
while IFS= read -r line;
do
echo "tester: $line"
sed -i 's/\s*$//' $line ;
done < file_list.txt
Respuesta1
Como han dicho Ipor y Glenn, según su informe del comentario de B Layer sobre tail -1 file_list.txt
, dado que hay una línea en blanco al final de ese archivo, cuando el while
bucle lee esa línea en blanco, a la $line
variable se le asigna un valor vacío, sin dejar ningún nombre de archivo. para sed
procesar.
$ cat i
file1
file2
$ while IFS= read -r line; do printf -- "-->%s<--\n" "$line"; done < i
-->file1<--
-->file2<--
--><--
La solución aquí es eliminar esa línea en blanco final de file_list.txt, o realizar una prueba alrededor de su procesamiento real para comprobar la existencia del archivo:
# do ...
if [ -f "$line" ]
then
# process file
fi
# done ...
Respuesta2
Tuve el mismo problema, para mí fue porque no pasé el archivo de entrada a sed CMD
Ejemplo:
boy=$1
boy2=$2
boy3=$3
while IFS="," read -r col1 col2
do
if [ "$col1" == "oke" ]; then
sed -i "s/$col2/$boy/g" test.txt
fi
done < test.txt