我正在尝试制作一个脚本,该脚本遍历文件提供的路径列表并编辑每个文件中的URL,但是遇到了一个奇怪的问题。这是一个可复制的示例。
read -r line < paths.txt
echo $line
sed -i 's/word/otherword/' $line
路径来自path.txt,其中仅包含一行,其中一行用换行符读取bat.properties
。
脚本的输出如下。
$ bash urlReplacer.sh
bat.properties
: No such file or directoryies
作为参考,在这种情况下sed产生的错误通常为sed: No such file or directory
。通过更改bat.properties
行,我已经确认“属性”中的“ ies”是附加到错误末尾的部分,但我真的不知道丢失的“ sed”。您还可以看到,bat.properties
读起来很完美。我猜这是sed滥用的问题,但我不确定问题出在哪里。
答案 0 :(得分:3)
我认为path.txt具有DOS行尾,也称为\r
或^M
。
首先或在脚本中将其删除。您可以使用dos2unix
,tr -d '\r'
或:
IFS=$'\r' read -r line : < paths.txt
echo "$line"
sed -i 's/word/otherword/' "$line"
我用line
引用了带空格的文件名。