Bash sed找不到文件

Bash sed找不到文件,bash,shell,sed,Bash,Shell,Sed,我在bash脚本中使用sed来更改一些变量值。这些变量是不同类型的混合变量,还包括一些特殊字符: sed -i -e "s/NPROC=[^,]*,/NPROC=$NPROC/" \ -e "s/NFRPOS=[^,]*,/NFRPOS=$OUTPUTFREQ/" \ -e "s/NFRHIS=[^,]*,/NFRHIS=$OUTPUTFREQ/" \ -e "s/COSP_OUTPUT_FREQUENCY=[^,]*,/COSP_OUTPUT_FREQUE

我在bash脚本中使用sed来更改一些变量值。这些变量是不同类型的混合变量,还包括一些特殊字符:

 sed -i -e "s/NPROC=[^,]*,/NPROC=$NPROC/" \
      -e "s/NFRPOS=[^,]*,/NFRPOS=$OUTPUTFREQ/" \
      -e "s/NFRHIS=[^,]*,/NFRHIS=$OUTPUTFREQ/" \
      -e "s/COSP_OUTPUT_FREQUENCY=[^,]*,/COSP_OUTPUT_FREQUENCY=$OUTPUTFREQ/" \
      -e "s/TSTEP=[^,]*,/TSTEP=$TSTEP/" \
      -e "s/NCEXTR=[^,]*,/NCEXTR=$NCEXTR/" \
      -e "s/NVXTR2=[^,]*,/NVXTR2=$NVXTR2/" \
      -e "s/NVEXTR=[^,]*,/NVEXTR=$NVEXTR/" \
      -e "s/COSP_NLEVELS=[^,]*,/COSP_NLEVELS=$NLEV/" \
      -e "s/NVEXTRAGB=[^,]*,/$NVEXTRAGB/" \
      -e "s/NVEXTR2GB=[^,]*,/$NVEXTR2GB/" \
      -e "s/NFPLEV=[^,]*,/NFPLEV=$NFPLEV/" \
      -e "s/CNMEXP=[^,]*,/CNMEXP=\"${EXPID}\"/" \
      -e "s/LFPOS=[^,]*,/NFPOS=2/" \
      -e "s/NLAT=[^,]*,/NLAT=$NLAT/" \
      -e "s/NLON=[^,]*,/NLON=$NLON/" \
         $NAMELIST


+ sed -i -e 's/NPROC=[^,]*,/NPROC=10/' ' '
sed: can't read  : No such file or directory

但是,我一直收到一个错误,即找不到文件$NAMELIST。文件确实存在于同一目录中,并且名称中没有错误。添加完整路径也没有帮助。所以我想知道这个sed命令有什么问题。

无论出于什么原因,您的NAMELIST变量没有被扩展。Sed正在寻找一个名为“$NAMELIST”的文件,而不是“/path/to/NAMELIST.txt”


检查设置名称列表变量的逻辑

第一个反斜杠后面有一个空格。您没有转义换行符以继续执行命令,而是转义了空格,因此它认为要编辑的文件名是单个空格


确保反斜杠是每行的最后一个字符。

另一种解释是
名称列表
字面上包含短语“无法读取”。致:

$ NAMELIST="can't read "
$ sed -e 1d "$NAMELIST"
sed: can't read : No such file or directory

如何设置
NAMELIST

将完整路径添加到文件并显式显示名称没有帮助。我是sed新手,所以我怀疑我在命令中遗漏了什么。这就是问题所在。谢谢:-)很难注意到空白。您可以使用文本编辑器自动删除行中的尾随空格,或者至少显示不可见字符,如空格。我个人不喜欢连续线,正是因为这样的问题。很好。我在终端模式下使用emacs,所以我没有看到问题。此外,还必须知道,在这种情况下,空格会导致这种错误。现在还不清楚这样一个良性的角色是否会导致这样的问题。呵呵……我不太擅长用Bash编写代码。Namelist=Namelist.t255。原始错误在哪里?找不到$Namelist?新的错误很容易找出。您可能还有另外一个错误
/path/to/namelist:Permission denied
。该错误是在行继续后添加了空格。