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