ループ内で sed を使用するとエラーが発生する - sed:入力ファイルがありません

ループ内で sed を使用するとエラーが発生する - sed:入力ファイルがありません

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

関連情報