sed无法找到文件

时间:2016-11-08 21:44:29

标签: 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_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命令有什么问题。

3 个答案:

答案 0 :(得分:3)

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

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

答案 1 :(得分:0)

无论出于何种原因,你的NAMELIST变量都没有被扩展。 Sed正在寻找一个名为" $ NAMELIST"的文件。而不是说" /the/path/to/namelist.txt" ...

检查设置NAMELIST变量的逻辑是什么。

答案 2 :(得分:0)

另一种解释是 @Override public void actionPerformed(ActionEvent e) { int a = 0, b = 0, c = 0; boolean isValidA = true, isValidB = true, isValidC = true; try { a = Integer.parseInt(theApp.tred.getText()); } catch (NumberFormatException ex) { isValidA = false; } try { b = Integer.parseInt(theApp.tgreen.getText()); } catch (NumberFormatException ex) { isValidB = false; } try { c = Integer.parseInt(theApp.tblue.getText()); } catch (NumberFormatException ex) { isValidC = false; } if (!isValidA) { tred.setText(""); } else { if (a < 0) { a = 200; tred.setText("200"); } else if (a > 255) { a = 255; tred.setText("255"); } } if (!isValidB) { tgreen.setText(""); } else { if (b < 0) { b = 200; tgreen.setText("200"); } else if (b > 255) { b = 255; tgreen.setText("255"); } } if (!isValidC) { tblue.setText(""); } else { if (c < 0) { c = 200; tblue.setText("200"); } else if (c > 255) { c = 255; tblue.setText("255"); } } if (isValidA && isValidB && isValidC) { message.setText("CE203 Assignment submitted by: Steven Beresford - 1404398"); message.setForeground(new Color(a, b, c)); } else { message.setText("invalid input! please enter numbers only"); message.setForeground(new Color(0, 0, 0)); } } 字面上包含“无法阅读”这一短语。致白:

NAMELIST

您如何设置$ NAMELIST="can't read " $ sed -e 1d "$NAMELIST" sed: can't read : No such file or directory