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

関連情報