我正在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 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