while ループ内で、ファイル リストを含むファイルから末尾の空白を削除するために使用していますsed
。空白は削除されます。しかし、メッセージが表示されます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