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レイヤーがコメントに報告したように、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