obteniendo el error al usar sed en un bucle: sed: no hay archivos de entrada

obteniendo el error al usar sed en un bucle: sed: no hay archivos de entrada

Estoy usando sedun 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 whilebucle lee esa línea en blanco, a la $linevariable se le asigna un valor vacío, sin dejar ningún nombre de archivo. para sedprocesar.

$ 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 ...

ycita siempre tus variables!

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

información relacionada