루프에서 sed를 사용할 때 오류가 발생합니다. sed:입력 파일이 없습니다.

루프에서 sed를 사용할 때 오류가 발생합니다. sed:입력 파일이 없습니다.

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

Ipor과 glenn이 모두 말했듯이 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

관련 정보