エラー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 ...

そして常に変数を引用してください。

おすすめ記事