получаю ошибку при использовании sed в цикле - sed:no input files

получаю ошибку при использовании sed в цикле - sed:no input files

Я использую sedв цикле while для удаления конечных пробелов из файла, содержащего список файлов. Пробелы удаляются. Но я получаю сообщение sed:no input files.

Ниже приведен цикл while, который я использую:

while IFS= read -r line; 
        do
            echo "tester: $line"
            sed -i 's/\s*$//' $line ;
        done < file_list.txt

решение1

Как сказали Айпор и Гленн, основываясь на вашем отчете из комментария B Layer относительно tail -1 file_list.txt, ​​поскольку в конце этого файла есть пустая строка, когда цикл whileсчитывает эту пустую строку, $lineпеременной присваивается пустое значение, не оставляя имени файла для sedобработки.

$ cat i
file1
file2

$ while IFS= read -r line; do printf -- "-->%s<--\n" "$line"; done < i
-->file1<--
-->file2<--
--><--

Исправление этой ошибки — удалить пустую строку в конце файла file_list.txt или обернуть тест вокруг фактической обработки, чтобы проверить существование файла:

# do ...
if [ -f "$line" ]
then
  # process file
fi
# done ...

ивсегда заключайте переменные в кавычки!

решение2

Была та же проблема, у меня это было из-за того, что я не передал входной файл в sed CMD

Пример:

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

Связанный контент