在循環中使用 sed 時出現錯誤 sed:no input files

在循環中使用 sed 時出現錯誤 sed:no input files

我正在sedwhile 循環中使用從包含文件列表的文件中刪除尾隨空格。空白區域正在刪除。但我收到了訊息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

相關內容