Estou usando sed
um loop while para remover os espaços em branco finais de um arquivo que contém uma lista de arquivos. Os espaços em branco estão sendo removidos. Mas estou recebendo a mensagem sed:no input files
.
A seguir está o loop while que estou usando:
while IFS= read -r line;
do
echo "tester: $line"
sed -i 's/\s*$//' $line ;
done < file_list.txt
Responder1
Como Ipor e Glenn disseram, com base no seu relatório do comentário da camada B sobre tail -1 file_list.txt
, como há uma linha em branco no final desse arquivo, quando o while
loop lê essa linha em branco, a $line
variável recebe um valor vazio, não deixando nenhum nome de arquivo para sed
processar.
$ cat i
file1
file2
$ while IFS= read -r line; do printf -- "-->%s<--\n" "$line"; done < i
-->file1<--
-->file2<--
--><--
A correção aqui é excluir a linha em branco final de file_list.txt ou agrupar um teste em torno de seu processamento real para testar a existência do arquivo:
# do ...
if [ -f "$line" ]
then
# process file
fi
# done ...
Responder2
Tive o mesmo problema, para mim foi porque não passei o arquivo de entrada para sed CMD
Exemplo:
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