![오류 sed:루프에서 sed를 사용할 때 입력 파일이 없습니다.](https://linux55.com/image/122608/%EC%98%A4%EB%A5%98%20sed%3A%EB%A3%A8%ED%94%84%EC%97%90%EC%84%9C%20sed%EB%A5%BC%20%EC%82%AC%EC%9A%A9%ED%95%A0%20%EB%95%8C%20%EC%9E%85%EB%A0%A5%20%ED%8C%8C%EC%9D%BC%EC%9D%B4%20%EC%97%86%EC%8A%B5%EB%8B%88%EB%8B%A4..png)
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
변수에 null 값이 할당되어 처리할 파일 이름이 남지 않습니다 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